null和undefined的比较
May 03, 2018
相同点
- 均为基本类型
- 都属于“假值”,用
Boolean()转换类型后都为false - 使用
==进行比较时,二者相等
看 2 个可能会遇到的情况:
//例1
var a = null;
var b;
var c = 0;
if (!a) {
console.log('abc'); //a 为 null
}
if (!b) {
console.log('abc'); //b 为 undefined
}
if (!c) {
console.log('abc'); //c 为 0
}
//例2
if (b == a) {
console.log('a,b');
}
if (b === undefined) {
console.log('b');
}例 1 中,这几个值在 if 语句中都会被隐式转换为boolean类型,而且恰好都为假值,取反之后均为真,因此 三个 if 内部的 console 语句都可以执行。
如果要区分具体值,需要指明比较的对象。比如例 2 中第一个 if 语句,当 b 为undefined或null时,才判定为真;在第二个 if 语句中,只有当 b 为undefined时才判定为真,null也无法通过。
不同点
- 类型不同,因此二者用
===比较不相等,typeof的值也不同 - 转换为 string,number 后,二者不相同
//例3
undefined === null; //false
typeof undefined; //'undefined'
typeof null; //'object'
String(undefined); //'undefined'
String(null); //'null'
Number(undefined); //NaN
Number(null); //0