为什么' ='和' ||'将被评估为真?

时间:2017-09-07 15:15:08

标签: javascript

我看了这篇文章,它提到这个if (variable == 1 || 2 || 6)无效(JS Short for if (a == b || a == c))。

但是我试过这个例子,它会被证明是真的,为什么?

var a = 'apple';
if('apple2' == a || 'banana' ) {
 alert('hi');
}

以下是工作示例: https://jsfiddle.net/Loun1ggj/

更新:
如果(' apple2' == a ||' banana')未评估if(' apple2 == a' ||' apple' ; ==' banana')?

5 个答案:

答案 0 :(得分:3)

让我们分解表达:

if('apple2' == a || 'banana' )

要评估的第一部分是==,因为它具有最高operator precedence

'apple2' == a

这是标准equality,并返回false,告诉我们:

if(false || 'banana')

|| operator in JS不返回truefalse,但其参数中的任何一个都是" truthy"。像'banana'这样的非空字符串被视为" truthy",所以我们最终得到这个:

if('banana')

现在我们再看看"真实性" 'banana',if语句继续。

答案 1 :(得分:1)

if('apple2' == a || 'banana' )以这种方式评估:

if(('apple2' == a) || ('banana') ), which is:
if :
'apple2' == a // false
||(or)
'banana' // true, since Boolean('banana') is true (a non-empty string is a truthy value)
so => if (false or 'banana') => if ('banana') // => true

未评估为if('apple2' == a || 'apple2' == 'banana' )

答案 2 :(得分:1)

由于'banana'始终为true,因此它将始终运行,请参阅下面的示例

var a = 'apple';
if('apple2' == a) {
 alert('hi');
}
if('banana'){
  alert('hello');
}

答案 3 :(得分:1)

根据this,运营商==优先于运营商||。所以表达式评估如下:

if('apple2' == a || 'banana' )

'apple2' == a //false

'banana' //true (non-empty string)

所以最后的评估将永远是真的:

if(false || true) //true

答案 4 :(得分:0)

这里有两个表达

  1. 'apple2'== a解析为麻痹
  2. 'banana'解决了这个问题
  3. 因为'banana'未定义或基本上为null。