data-null
基本类型之一的 Null
只拥有一个值 null
,代表空值。表示一个变量被人为重置为空对象,在内存中的表示就是栈中的变量即不是其他5中基本类型,也没有引用类型中指向堆中的指针。当一个引用类型变量被赋值为 null
时,原来的引用类型对象在堆中处于游离状态,GC 会择机回收该对象并释放内存。因此想要回收哪个变量。就将它设为 null
就好了
存储结构
在JavaScript
的第一个版本中,单个值在栈中占据32
位的存储单元。存储单元分为两个部分:一部分是标记位,另一部分是数据。Null
的标记位和数据部分全部都是0
,也就是说从0
到31
位都是0
。而标记位000
属于Object
类型,所以typeof null = object
问题
问题一、null 和 undefined 有什么关系?
相同点
- 都是代表着空类型
- 转换为
Boolean
都是false
null == undefined
结果为true
不同点
typeof null
结果为{}
而typeof undefined
结果为undefined
Number(null)
结果为0
而Number(undefined)
结果为NaN
null === undefined
结果为false
问题一、为什么 typeof null 会被判断为 object?
在 JavaScript
中。数据在底层都是以二进制储存,引用类型的二进制前三位为 0
,typeof
是根据这个特性来进行判断类型的工作,可这里有一个问题就是,null
类型所有位数都为 0
,所以它的前三位也为 0
,所以 null
会被判断为 object
问题二、null >= null
为什么是 true
?
检验
console.log(null >= null) // true
原因
>=
大于等于操作符,要求两边必须为数值类型,所以要对null
强制类型转换,内部执行ToNumber(null)
输出0
, 所以最后的表达式为null >= null
可以转化为 0 >= 0
, 结果为 true