Javascript空字符串比较

时间:2012-05-21 19:23:59

标签: javascript comparison

我不明白为什么一个场景评估为false而另一个场景评估为true。

情景1:

> '' == ''
true

情景2:

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

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

我确信我在这里缺少一些基本的东西,这正是我想要弄清楚的。我可以轻松地编写代码,但我想学习为什么它正在发生......下次,你知道吗?

3 个答案:

答案 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

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

DEMO

你想要这个:

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

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

  • 0
  • “” - 空字符串
  • 的NaN
  • false

答案 2 :(得分:1)

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

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