为什么';t空字符串==JavaScript中的null
据我所知,根据ECMAScript,空字符串和null都是错误的。如果两者都是虚假的,那么为什么下面的评估结果不是真的为什么';t空字符串==JavaScript中的null,javascript,Javascript,据我所知,根据ECMAScript,空字符串和null都是错误的。如果两者都是虚假的,那么为什么下面的评估结果不是真的 var emptyString = ''; if (emptyString == null) { console.log('emptyString == null'); } else { console.log('emptyString does not == null'); // but why? }
var emptyString = '';
if (emptyString == null) {
console.log('emptyString == null');
}
else {
console.log('emptyString does not == null'); // but why?
}
更常用的抽象比较(例如==)在进行比较之前将操作数转换为相同的类型 这里,null是一个falsy值,但null不是==false falsy值null和undefined不等同于除其自身之外的任何内容:
(null == false); // false
(null == null); // true
(undefined == undefined); // true
(undefined == null); // true
由于另一个操作数为null(这也是javascript中的一种类型),空字符串(falsy值)和null的抽象比较不会给出真实值
我想这对你有帮助
还有这个
空字符串和null都是错误的
是的,但这并不意味着所有的falsy值都是相等的NaN
和0
也都是错误的,但它们绝对不相等。反之亦然,“0”==0
,但“0”
并不可靠
值的草率等价是由及其类型强制定义的,
null
不是==
而是未定义的
,因为空字符串与无字符串不同。因为您没有将每个字符串与false(y)进行比较,您正在将空字符串与空值进行比较。苹果和橙子都是水果,但是Apples==oranges
也会计算为false。这个问题并没有那么牵强。JavaScript中的相等运算符执行类型强制,并且有些不一致。例如,'=[]
为真,但'
为假值,[]
为真值。另外,null==undefined
是真的,所以至少还有另外一种情况,null
等于另一个假值;尝试0==''
,您将看到它的计算结果实际上是真的。我想这现在开始有意义了。实际上,您不希望任何内容==
或===null
,因为null
应用于检查其他值和类型。这正是他们对其他值和类型进行真实/虚假评估的原因。这提供了一种类似于if(emptyString)
的方法,如果您不知道将要接收的值是空字符串还是null,则可以使用该方法来替换null检查。