参考文章:null 和 undefined
-
null
类型只有一个值就是null
;undefined
类型只有一个值,就是undefined
。它们的名称既是类型也是值。 -
null
表示一个空的对象引用,表示该处的值现在为空,而这也正是typeof
操作符检测null
时候,返回object
的原因。
null
是object
类型,但不是object
的实例,用instanceof
为false
。
因为Object.prototype
的原型(__proto__
)指向null
。
undefined
表示未定义,它是undefined
类型; -
null
和undefined
没有toString
方法。所以null
和undefined
和其他数据比较都是false
。 - 如果定义的变量准备将来用来保存对象,那么最好将该变量初始化为
null
而不是其他值。这样一来,只要直接检测null
值就知道相应的变量是否已经保存了一个对象的引用:
if(car != null){
//car保存了一个对象的引用,就可以对car变量指向的对象进行操作
}
- 如果一个变量未定义,或者变量定义了但未赋值,则是
undefined
。无论在什么情况下都没有必要把一个变量的值显示地设置为undefined
。
注意:变量未赋值与未定义的变量是不一样的,看下面的例子。
var message;
//var age;
console.log(message);//"undefined"
console.log(age);//Uncaught ReferenceError: age is not defined
对于尚未声明过的变量,只能执行一项操作typeof
。对未声明的变量执行typeof
操作符同样也会返回undefined
值。
var message;
//var age;
console.log(typeof message);//"undefined"
console.log(typeof age);//"undefined"
-
Number
、String
和Boolean
如果不作为构造函数调用(即调用时不加new
),常常用于将任意类型的值转为数值、字符串和布尔值。
Boolean(undefined) //false
Number(undefined): //NaN
String(undefined): //"undefined"
Boolean(null) //false
Number(null): //0
String(null): //"null"
- 下面是返回
undefined
的典型场景:
// 变量声明了,但没有赋值
var i;
i // undefined
// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function f(x) {
return x;
}
f() // undefined
// 对象没有赋值的属性
var o = new Object();
o.p // undefined
// 函数没有返回值时,默认返回 undefined
function f() {}
f() // undefined
- 在
if
语句中,它们都会被自动转为false
。
undefined
派生自null
,所以相等运算符(==)两者相等。但严格相等运算符(===)两者不等。
注意:(==)用于比较判断两者相等,它在比较的时候可以自动转换数据类型。(===)用于严格比较判断两者严格相等,不会进行自动转换,要求进行比较的操作数必须类型一致。
if (!undefined) {
console.log('undefined is false');
}
// undefined is false
if (!null) {
console.log('null is false');
}
// null is false
undefined == null
// true
网友评论