null 和 undefined的区别
1.首先null
和undefined
都属于基本数据类型
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。