1. 历史
- 1995年 JavaScript 诞生时,最初像 Java 一样,只设置了
null
表示"无"。根据 C 语言的传统,null
可以自动转为0。
- 但是,JavaScript 的设计者 Brendan Eich,觉得这样做还不够。首先,第一版的 JavaScript 里面,
null
就像在 Java 里一样,被当成一个对象,Brendan Eich 觉得表示“无”的值最好不是对象。其次,那时的 JavaScript 不包括错误处理机制,Brendan Eich 觉得,如果null
自动转为0,很不容易发现错误。
- 因此,他又设计了一个
undefined
。区别是这样的:null
是一个表示“空”的对象,转为数值时为0;undefined
是一个表示"此处无定义"的原始值,转为数值时为NaN
。
2. 返回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
3. 一些面试题
undefined == null // true
undefined === null // false
Number(null) // 0
Number(undefined) // NaN
----
5 + null // 5
5 + undefined // NaN