我看了这篇文章,它提到这个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')?
答案 0 :(得分:3)
让我们分解表达:
if('apple2' == a || 'banana' )
要评估的第一部分是==
,因为它具有最高operator precedence:
'apple2' == a
这是标准equality,并返回false
,告诉我们:
if(false || 'banana')
||
operator in JS不返回true
或false
,但其参数中的任何一个都是" 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)
这里有两个表达
因为'banana'未定义或基本上为null。