据我所知,根据ECMAScript,空字符串和null都是假的。如果两者都是假的,那么为什么以下评估为真呢?
var emptyString = '';
if (emptyString == null) {
console.log('emptyString == null');
}
else {
console.log('emptyString does not == null'); // but why?
}
答案 0 :(得分:4)
空字符串和null都是假的
是的,但这并不意味着所有的假值都会彼此相等。 NaN
和0
也都是假的,但它们肯定不相等。反之亦然,"0" == 0
但"0"
不是假的。
值的草率等值由Abstract Equality Algorithm及其类型强制定义,null
除==
之外的任何内容都不是undefined
。
答案 1 :(得分:2)
更常用的抽象比较(例如==)在进行比较之前将操作数转换为相同的类型。
这里,null是一个假值,但是null不是== false
虚假值null和undefined不等于除了它们之外的任何东西:
(null == false); // false
(null == null); // true
(undefined == undefined); // true
(undefined == null); // true
由于另一个操作数为null(也是javascript中的一个类型),空字符串(falsy value)和null的抽象比较不会给出真值。
我认为这会对你有帮助。
这也是