我不明白为什么一个场景评估为false而另一个场景评估为true。
情景1:
> '' == ''
true
情景2:
> '' == ('' || undefined)
false
情景2是否询问(空字符串)是否等于:(空字符串)或未定义?
我确信我在这里缺少一些基本的东西,这正是我想要弄清楚的。我可以轻松地编写代码,但我想学习为什么它正在发生......下次,你知道吗?
答案 0 :(得分:10)
'' == ( '' || undefined )
与
不一样( '' == '' ) || ( '' == undefined )
更像是:
var foo = '' || undefined; // Results in undefined
然后将foo
与空字符串进行比较:
foo == ''; // undefined == '' will result in false
逻辑||
是一个短路运营商。如果左边的参数是 truthy ,则甚至不评估右边的参数。在JavaScript中,''
不被视为 truthy :
if ( '' ) console.log( 'Empty Strings are True?' );
因此返回undefined
并与空字符串进行比较。当您在括号内执行此逻辑时,''
和undefined
不知道等待发生的即将发生的等式检查 - 他们只是想知道它们中哪些将存活这次评估。
答案 1 :(得分:2)
让我们打破它:
'' == ('' || undefined) // return "undefined"
'' == undefined // false
||
返回第一个真值或最后一个值。
你想要这个:
'' == undefined || '' == false
undefined
仅==
null
,而不是所有其他“虚假”值:
答案 2 :(得分:1)
尝试'' == '' || '' == undefined
与几乎所有编程语言一样,运算符两侧的表达式必须求值为有效的操作数。 ||
是逻辑OR运算符,用于计算一对布尔操作数。