Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript检查str是否等于foo或bar_Javascript - Fatal编程技术网

javascript检查str是否等于foo或bar

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('返

我试图通过下面的测试确定字符串是否等于'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('返回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做了非常不同的事情。第一次和第二次测试也是如此第一次和第二次测试相同。;-)