Null类型与Undefined类型是javascript五大基本数据类型中的两种,他们的使用有诸多相似,下面来看看它们的区别于联系。

基本含义

undefined:”未定义”
null:”空对象指针”

是否保留字

undefined:”否”,可以作为标识符,可覆盖
null:”是”

定义

ECMAScipt中的变量是松散类型的,即可以用来保存任何类型的数据。

1
2
3
4
5
6
7
var Benjamin;
var Benjamin02 = null;
console.log(Benjamin);//undefined
console.log(Ben);//报错:Ben is not defined
console.log(typeof Benjamin);//undefined
console.log(typeof Ben); //undefined
console.log(typeof Benjamin02);//object

因null是空对象,所以一般定义存放对象的标识符时,会指定null值

in操作符

1
2
3
4
console.log(undefined in window);//true
console.log(undefined in {});//false
console.log(null instanceof Object);//false
undefinedwindow下的一个特殊属性

返回值

  • 返回undefined值的情形:
    1)访问未修改的全局变量 undefined。
    2)由于没有定义 return 表达式的函数隐式返回。
    3)return 表达式没有显式的返回任何内容。
    4)访问不存在的属性。
    5)函数参数没有被显式的传递值。
    6)任何被设置为 undefined 值的变量。

  • 返回null值的情形:
    1)任何被设置为 undefined 值的变量
    2)它在JavaScript内部有一些使用场景(如声明原型链的终结 Foo.prototype = null)但是大多数情况下都可以使用undefined来代替。

计算

1
2
3
console.log(333+undefined);//NaN
console.log(333+null);//333
null 与数值运算时转换为0

性能

1)由于window对象的属性值是非常多的,在每一次与undefined的比较中,搜索window对象的undefined属性都会花费时间。在需要频繁与undefined进行比较的函数中,这可能会是一个性能问题点。
2)为了避免可能对undefined值的改变,一个常用的技巧是使用一个传递到匿名包装器的额外参数。 在调用时,这个参数不会获取任何值。

1
2
3
(function(win, doc, undefined) {
//这样undefined就成了局部变量
})(window,document);

转载申请

本作品采用知识共享署名 4.0 国际许可协议进行许可,转载时请注明原文链接,文章内图片请保留全部内容。