JavaScript 数据结构与类型
JavaScript 目前包含七种原始数据类型(primitives data type) // 2018-03-07
boolean
null
undefined
number
string
Symbol (ES6 引入)
bigint (ES 2020)
以及两种基本数据结构(复合数据结构)
object
function
无论是 Map, Set, RegExp, Array 等全是基于 object
Note:
typeof null === 'object'返回 true,内部 BUG 且无法修复。typeof NaN === 'number'且NaN !== NaN,只能通过Number.isNaN判断。NaN的含义是无法表示的数字。
Why typeof(null) is object
早期的 JavaScript 使用 32 bit 存值,包括一个表示类型的标记(1-3 位)和值的实际数据。
类型标记存储在低位上。
1Int000Object010Double100String110Boolean
特殊值
undefined用整数−2**30次方,溢出的方式表示null机器空指针,标志位也是000。
typeof 是基于类型的标记做的判断,因此 typeof null === 'object'
bigint
bigint 能表示大于 的整数
使用 typeof 测试时, BigInt 对象返回 "bigint"
bigint 只能与 bigint 进行运算,不能直接与 number 进行运算。
由于 bigint 存在符号,所以不支持无符号位移运算符 >>> 和 <<<。 为了兼容 asm.js ,BigInt 不支持单目 (+) 运算符。
bigint 能够直接与 number 进行比较运算。 但是不是严格相等的,而是宽松相等的。
bigint 转换成 bool 时与 number 类似
最后更新于