null 和 undefined的区别

170 阅读2分钟

null 和 undefined的区别

1.首先nullundefined都属于基本数据类型

2.undefined代表未定义;null代表空对象

3.一般变量声明了,但是没有赋值就会返回undefined;定义一个变量赋值为null,作用通常用于下面给这个变量赋值为对象

4.undefined在js中不是一个保留字,也就是说可以可以使用undefined作为变量名(let undefined = 1),但是这样做是非常危险的,它会影响对 undefined 值的判断。

type null === 'object' ?

首先这是js历史遗留问题,具体原因分析如下:

在 JavaScript 第一个版本中,所有值都存储在 32 位的单元中,每个单元包含一个小的 类型标签(1-3 bits)  以及当前要存储值的真实数据。类型标签存储在每个单元的低位中,共有五种数据类型:

000: object - 当前存储的数据指向一个对象。
  1: int - 当前存储的数据是一个 31 位的有符号整数。
010: double - 当前存储的数据指向一个双精度的浮点数。
100: string - 当前存储的数据指向一个字符串。
110: boolean - 当前存储的数据是布尔值。

如果最低位是 1,则类型标签标志位的长度只有一位;如果最低位是 0,则类型标签标志位的长度占三位,为存储其他四种数据类型提供了额外两个 bit 的长度。 有两种特殊数据类型:

  • undefined的值是 (-2)30(一个超出整数范围的数字);
  • null 的值是机器码 NULL 指针(null 指针的值全是 0)

那也就是说null的类型标签也是000,和Object的类型标签一样,所以会被判定为Object。