参考文章: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










网友评论