跳到主要内容

data-null

基本类型之一的 Null 只拥有一个值 null,代表空值。表示一个变量被人为重置为空对象,在内存中的表示就是栈中的变量即不是其他5中基本类型,也没有引用类型中指向堆中的指针。当一个引用类型变量被赋值为 null 时,原来的引用类型对象在堆中处于游离状态,GC 会择机回收该对象并释放内存。因此想要回收哪个变量。就将它设为 null 就好了

存储结构


JavaScript的第一个版本中,单个值在栈中占据32位的存储单元。存储单元分为两个部分:一部分是标记位,另一部分是数据。Null 的标记位和数据部分全部都是0,也就是说从031位都是0。而标记位000属于Object类型,所以typeof null = object

问题


问题一、null 和 undefined 有什么关系?

相同点

  • 都是代表着空类型
  • 转换为Boolean都是false
  • null == undefined 结果为 true

不同点

  • typeof null 结果为 {}typeof undefined 结果为 undefined
  • Number(null) 结果为 0Number(undefined) 结果为 NaN
  • null === undefined 结果为 false

问题一、为什么 typeof null 会被判断为 object?

JavaScript 中。数据在底层都是以二进制储存,引用类型的二进制前三位为 0typeof 是根据这个特性来进行判断类型的工作,可这里有一个问题就是,null 类型所有位数都为 0,所以它的前三位也为 0 ,所以 null 会被判断为 object

问题二、null >= null 为什么是 true

检验

console.log(null >= null) // true

原因

>= 大于等于操作符,要求两边必须为数值类型,所以要对null强制类型转换,内部执行ToNumber(null) 输出0 , 所以最后的表达式为null >= null 可以转化为 0 >= 0 , 结果为 true