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