参考资料:null == undefined ?
null与undefined
undefined,一个变量最原始的状态,而非人为操作的结果。
null,一个对象被人为的重置为空对象,而非一个变量最原始的状态 。关于
typeof null == 'object'
的解释
null 有属于自己的类型 Null,而不属于Object类型,typeof 之所以会判定为 Object 类型,是因为JavaScript 数据类型在底层都是以二进制的形式表示的,二进制的前三位为 0 会被 typeof 判断为对象类型,而 null 的二进制位恰好都是 0 ,因此,null 被误判断为 Object 类型。关于
undefined == null;
的解释
ECMAScript 规范认为,既然 null 和 undefined 的行为很相似,并且都表示 一个无效的值,那么它们所表示的内容也具有相似性。
注意,这里无法用类型转换来解释,因为:
Number(null); // 0
Number(undefined); // NaN
null == 0 ; //false
if
的判断
if ("") {
console.log('empty')
} //undefined
if (" ") {
console.log('empty')
} //empty
类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0, −0, 或者 NaN 为 false, 其他为 true |
String | 空字符串(长度为零)为 false,其他都为 true |
Object | true |
- ==
的判断
和if
判断不一样的是,==
是要把两边的值转化为number进行判断。对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果。
所以才会有:
"" == 0; //true
" " == 0; //true
"hello" == true; //false
toNumber
类型 | 结果 |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | 空字符串为 0,“abc” -> NaN, “123” -> 123 |