javascript检查str是否等于foo或bar
我试图通过下面的测试确定字符串是否等于'foo'或'bar',看起来test4是实现这一点的最佳方法,但我认为test3是最好的方法,但返回false 为什么返回false,有没有比test4更好的方法javascript检查str是否等于foo或bar,javascript,Javascript,我试图通过下面的测试确定字符串是否等于'foo'或'bar',看起来test4是实现这一点的最佳方法,但我认为test3是最好的方法,但返回false 为什么返回false,有没有比test4更好的方法 var arr=['a','b','c','d','e']; var str='f'; var检验; test=str==arr[0]?真:假; 日志('test1',test); log('返回false'); 测试=str='f'?真:假; 日志('test2',test); log('返
var arr=['a','b','c','d','e'];
var str='f';
var检验;
test=str==arr[0]?真:假;
日志('test1',test);
log('返回false');
测试=str='f'?真:假;
日志('test2',test);
log('返回true');
test=str==(arr[0]| | f')?真:假;
日志('test3',test);
log('返回false');
test=str==(arr[0]&&&f')?真:假;
日志('test4',test);
log('返回true');
测试=(str==arr[0])| |(str==f')?真:假;
console.log('test5',test);
log('返回true')
操作符不允许您像在第三个测试中那样编写满足测试要求的表达式。它在语法上是正确的,但在语义上与您打算做的不同
最后一个测试可以简单地编写:
test = (str == arr[0]) || (str == 'f');
不需要?:代码>操作员;上述表达式的结果已经是true
或false
,因为|
的两侧都返回布尔值
进一步解释,
test = str == (arr[0] || 'f');
将首先计算|
表达式。它将计算arr[0]
,如果该子表达式的结果不是falsy(不是0
,“
,NaN
,false
,null
,或未定义的
),则|
的值是arr[0]
的任何值。否则,|
的值为'f'
。只有到那时,=
才会进行比较,str
将只与arr[0]
和'f'
中的一个进行比较操作符不允许您像在第三个测试中那样编写一个表达式,以满足测试的要求。它在语法上是正确的,但在语义上与您打算做的不同
最后一个测试可以简单地编写:
test = (str == arr[0]) || (str == 'f');
不需要?:代码>操作员;上述表达式的结果已经是true
或false
,因为|
的两侧都返回布尔值
进一步解释,
test = str == (arr[0] || 'f');
将首先计算|
表达式。它将计算arr[0]
,如果该子表达式的结果不是falsy(不是0
,“
,NaN
,false
,null
,或未定义的
),则|
的值是arr[0]
的任何值。否则,|
的值为'f'
。只有这样才能进行=
比较,并且str
将仅与arr[0]
和'f'
中的一个进行比较,我将使用:
var test = (str === 'foo' || str === 'bar');
您不需要使用?:
,等式已经返回true
或false
我将使用:
var test = (str === 'foo' || str === 'bar');
您不需要使用?:
,等式已经返回true
或false
您需要定义“最佳”的标准。测试3和测试4做了非常不同的事情。你需要定义“最佳”的标准。测试3和4做了非常不同的事情。第一次和第二次测试也是如此第一次和第二次测试相同。;-)