6

我不明白为什么一种情况评估为假而另一种情况评估为真。

场景一:

> '' == ''
true

场景二:

> '' == ('' || undefined)
false

场景 2 是否不询问(空字符串)是否等于:(空字符串)或未定义?

我确定我在这里遗漏了一些基本的东西,这正是我想要弄清楚的。我可以轻松地编写代码,但我想了解它为什么会发生……下次,你知道吗?

4

3 回答 3

11
'' == ( '' || 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不知道即将发生的相等检查 - 他们只是想知道其中哪些将在此评估中幸存下来。

于 2012-05-21T19:26:52.413 回答
2

让我们打破它:

'' == ('' || undefined) // return "undefined"
'' == undefined // false

||返回第一个真值或最后一个值

演示

你要这个:

'' == undefined  || '' == false

undefined==适用于null,而不适用于所有其他“虚假”值:

  • 0
  • "" - 空字符串
  • 错误的
于 2012-05-21T19:27:43.523 回答
1

尝试'' == '' || '' == undefined

与几乎所有编程语言一样,运算符两边的表达式必须计算为有效的操作数。||是逻辑或运算符,用于计算一对布尔操作数。

于 2012-05-21T19:27:23.273 回答