基本数据类型有哪些?
在介绍null和undefined的区别之前,首先介绍下JS的基本数据类型有哪些?
- undefined
- number
- boolean
- string
- bigint
- symbol
- null
从上面的基本类型我们可以看出,null和undefined同为基本数据类型,那么下面我们来探讨一下他们之间有什么区别~
undefined
undefined表示的是一个变量最原始的状态值,未定义的状态值,而非人为操作的结果。
应用场景一:没有被赋值的变量
let test;
console.log(test); // undefined
应用场景二:对象身上不存在的属性
console.log(RegExp.test); // undefined
应用场景三:没有被传递参数的形参
// 没有被传递参数的形参
function test(a) {
console.log(a); // undefined
}
test()
null
null表示的是一个变量被人为设置为空对象,而不是原始状态。
应用场景一:将来用于表示对象的变量,初始化为null。
let obj = null;
obj = {name: '哈哈'};
应用场景二:为数据释放引用
解除引用的真正作用是让值脱离执行环境,以便垃圾收集器在下次运行时将其回收。
let obj = null;
obj = {
name: '哈哈'};
obj = null
null和undefined的区别总结
- undefined表示的是一个变量自然的、最原始的状态值。
- null表示的是一个变量被人为设置为空对象,而不是原始状态。
- 保证变量的语义,不要将变量显示赋值为undefined,释放一个对象的时候可以使用null。
问题
RQ:为什么typeof null为object?
在JS中进行数据底层存储的时候使用的是二进制,它的前三位代表的是存储的数据类型,而000代表的是object类型也就是引用类型的数据,null正好是000,所以使用typeof检测的时候会输出object,还有就是null指的是空指针对象,所以返回object,这是JS设计的一个bug。