前言
JS中undefined和null均被用来表示无,它们都是原始数据类型,而且只有细微的差别:null
用来表示一个“无”的对象,转为数值时结果为0;undefined
用来表示一个“无”的原始值,转为数值时结果为NaN。
Number(null) // 0
Number(undefined) // NaN
undefined
Undefined类型只有一个值,就是undefined。
以下情况均返回undefined:
- 变量声明后没有赋值
- 获取对象不存在的属性
- 没有返回值的函数执行结果
- 函数的参数没有传入
- void(expression)
var i;
console.log(i);//undefined
var o = {};
console.log(o.name);//undefined
function f(){};
console.log(f());//undefined
function f(x){return x;}
console.log(f());//undefined
console.log(void(0));//undefined
可以使用typeof操作符判断一个值是否是undefined类型
console.log(typeof undefined === 'undefined') // true
null
Null类型只有一个值,就是null。逻辑上null表示一个空的对象指针。
console.log(document.getElementById('test'));//null
不可以使用typeof操作符判断一个值是不是null,因为typeof null
结果是'object'
。最简单的方法是判断它是否等于null。
console.log(typeof null);//'object'
console.log(null === null);//true
console.log(undefined === null);//false
console.log('null' === null);//false
null和undefined虽然略有不同,但都表示缺省值,null表示空值,undefined表示未定义。它们是相等的。
console.log(null == undefined);//true
由于null和undefined都不是构造器类型,所以它们没有任何属性和方法,使用.
和[]
来存取这两个值的属性和方法时均产生类型错误。
var s = null
s.name // 报错