Javascript空字符串比较

Aar*_*cis 5 javascript comparison

我不明白为什么一个场景评估错误而另一个场景评估为真.

场景1:

> '' == ''
true
Run Code Online (Sandbox Code Playgroud)

场景2:

> '' == ('' || undefined)
false
Run Code Online (Sandbox Code Playgroud)

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

我确信我在这里缺少一些基本的东西,这正是我想要弄清楚的.我可以很容易地编写这个代码,但我想了解它为什么会发生......下次,你知道吗?

Sam*_*son 10

'' == ( '' || undefined )
Run Code Online (Sandbox Code Playgroud)

是不一样的

( '' == '' ) || ( '' == undefined )
Run Code Online (Sandbox Code Playgroud)

它更像是:

var foo = '' || undefined; // Results in undefined
Run Code Online (Sandbox Code Playgroud)

然后比较foo一个空字符串:

foo == ''; // undefined == '' will result in false
Run Code Online (Sandbox Code Playgroud)

说明

逻辑||是短路运营商.如果左边的参数是真实的,那么右边的参数甚至不会被评估.在JavaScript中,''不被认为是真实的:

if ( '' ) console.log( 'Empty Strings are True?' );
Run Code Online (Sandbox Code Playgroud)

因此undefined返回并与空字符串进行比较.当你在括号内执行这个逻辑时,''并且undefined不知道正在等待发生的即将发生的等式检查 - 他们只是想知道它们将在这个评估中存活下来.

  • "当你在括号内执行这个逻辑时,`''和`undefined`不知道等待发生的即将发生的等式检查"这就是它让我点击的原因.非常感谢@JonathanSampson (2认同)