null和undefined的区别是什么
这两个东西其实从表面来看,没有多大的区别,都表示的是空,在其他的语言中一般情况下只有null这个值,undefined 却是javascript才有的。
定义区别
先从定义上来看他的区别:
在犀牛书--《javaScript权威指南》这本书中说: null 和 undefined 都表示“值的空缺”,你可以认为undefined是表示系统级的、出乎意料的或类似错误的值的空缺,而null是表示程序级的、正常的或在意料之中的值的空缺。
而在红宝书--《javaScript高级程序设计》这本说说:在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。 null值则是表示空对象指针。
通过typeof运算符来看也是有区别的
console.log(typeof null);
console.log(typeof undefined);
通过运算我们可以发现结果分别为Object和undefined。所以你也可以理解为null是一个特殊的对象
内存上的区别
给一个全局变量赋值为null,相当于将这个变量的指针对象以及值清空,如果是给对象的属性 赋值为null,或者局部变量赋值为null,相当于给这个属性分配了一块空的内存,然后值为null, JS会回收全局变量为null的对象。
给一个全局变量赋值为undefined,相当于将这个对象的值清空,但是这个对象依旧存在,如果是给对象的属性赋值 为undefined,说明这个值为空值
综上总结
null表示"没有对象",即该处不应该有值。典型用法是:
- 作为函数的参数,表示该函数的参数不是对象。
- 作为对象原型链的终点。
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
- 变量被声明了,但没有赋值时,就等于undefined。
- 调用函数时,应该提供的参数没有提供,该参数等于undefined。
- 对象没有赋值的属性,该属性的值为undefined。
- 函数没有返回值时,默认返回undefined。