如果一个字符串等于'foo'或'bar',我试图计算出来,通过下面的测试,看起来test4是实现这个目标的最好方法但我认为test3是最好的方法,但是这个返回false。
为什么这会返回false并且有更好的方法test4?
unlist
答案 0 :(得分:3)
||
运算符不允许您像执行测试所期望的第三个测试一样编写表达式。它在语法上是正确的,但在语义上与你想要做的不同。
最后一次测试可以写成:
test = (str == arr[0]) || (str == 'f');
不需要? :
运营商;上述表达式的结果已经是true
或false
,因为||
的两边都返回布尔值。
进一步解释,
test = str == (arr[0] || 'f');
将首先评估||
表达式。它会评估arr[0]
,如果该子表达式的结果不是假的(不是0
,""
,NaN
,false
,null
,或undefined
)那么||
的值就是arr[0]
。否则,||
的值为'f'
。只有这样才能进行==
比较,str
将与仅arr[0]
和'f'
的进行比较。
答案 1 :(得分:2)
我会用:
var test = (str === 'foo' || str === 'bar');
您不需要使用? :
,相等性已经返回true
或false
。