数据类型容易忽略的细节

简介: 数据类型容易忽略的细节

数据类型的陷阱

1. 是不是Object

function isObject(obj) {
  if(typeof obj === 'object') {
    return true;
  }
  return false;
}

第一个问题: . 上面的方法有什么问题?

typeof null // object

第二个问题:为什么typeof null返回的值是"object" ?

typeof原理

js 在底层存储变量的时候,会在变量的机器码的低位1-3位存储其类型信息: 对象:000 浮点数:010 字符串:100 布尔:110 ”。typeof直接根据变量值得内存标识符进行判断并返回的是对应字符串形式的值。

// 类型标记位

// 000: object

// 001: integer

// 010: double

// 100: string

// 110: boolean

第三个问题:为什么不修复这个问题?

注意: 现在的V8引擎不在这样判断数据类型,为了考虑兼容性没有修改,ES6提案修改这个bug但是没有通过。因为修改可能会造成一连串bug。

2.+转为数字

const print = console.log;
function toNumber(val) {
    const result = +val;
    print(result);
    return result
}
// 传统数据类型
toNumber(null) // NaN
toNumber(undefined) // NaN
toNumber(1) // 1
toNumber("123aa") // NaN
toNumber({}) // NaN
toNumber(true) // 1
// ES6的 bigInt和Symbol
toNumber(10n)
toNumber(Symbol.for("a"))

ES6的 bigInt和Symbol无法实现

TypeError: Cannot convert a BigInt value to a number

TypeError: Cannot convert a Symbol value to a number

为什么会这样?

兼容性问题,在ES5中完全兼容,但是在ES6的新类型中不兼容。

目录
相关文章
|
8月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
4月前
|
C语言
C语言程序设计核心详解 第二章:数据与数据类型 4种常量详解 常见表达式详解
本文详细介绍了C语言中的数据与数据类型,包括常量、变量、表达式和函数等内容。常量分为整型、实型、字符型和字符串常量,其中整型常量有十进制、八进制和十六进制三种形式;实型常量包括小数和指数形式;字符型常量涵盖常规字符、转义字符及八进制、十六进制形式;字符串常量由双引号括起。变量遵循先定义后使用的规则,并需遵守命名规范。函数分为标准函数和自定义函数,如`sqrt()`和`abs()`。表达式涉及算术、赋值、自增自减和逗号运算符等,需注意运算符的优先级和结合性。文章还介绍了强制类型转换及隐式转换的概念。
|
8月前
|
存储 编译器 C语言
【C++】C++中规范[ 类型转换标准 ] 的四种形式
【C++】C++中规范[ 类型转换标准 ] 的四种形式
|
8月前
|
存储 安全 C语言
【C数据(一)】数据类型和变量你真的理解了吗?来看看这篇
【C数据(一)】数据类型和变量你真的理解了吗?来看看这篇
|
8月前
数据类型容易忽略的细节
数据类型容易忽略的细节
64 0
|
存储 编译器 C#
C# 变量数据类型的使用和案例(基础篇)
C# 变量数据类型的使用和案例(基础篇)
|
存储 编译器
数据类型的本质分析
数据类型的本质分析
109 0
|
存储 编译器 C语言
C语言数据类型类型及语句(各种详细的细节以及基础+持续更新中
C语言数据类型类型及语句(各种详细的细节以及基础+持续更新中
241 0
C语言数据类型类型及语句(各种详细的细节以及基础+持续更新中
C语言——enum枚举实例、知识点。使用枚举,减少相同定义步骤,简洁数据1.1.5
枚举是C语言常见的一种基本数据类型,它可以避免多个整数定义的麻烦,使代码整洁干净易读如此一看,就觉得繁琐无比,大量重复#define xx明显增加代码量,且数值需自己一一对应而枚举,可以解决这种定义连续数值的过程当变量第一个值未自定义时,第一个枚举成员的默认值则为整型0,后续成员值依次加1,如此时MON=0,TUE=1,WED=2·····.........
实战:第五章:EZDML修改数据类型
实战:第五章:EZDML修改数据类型
137 0
实战:第五章:EZDML修改数据类型