我具有以下功能
function test (x){
if(x==='a' || x!=='b' ||'c')
{
console.log('result');
console.log(x);
}
else {
console.log('wrong')
}
}
test('123');
我希望输出记录为“错误”,但它记录//结果123,如下图所示。我不确定是因为if条件不能像这样工作吗?
答案 0 :(得分:2)
'c'
将始终解析为true。您基本上是在说,
'c'
等于真实值吗?
...当然可以做到(这是一个非空字符串)。 Read about truthy/falsy。
您可能假设条件的这一部分将“借用”先前的(b)||
。这不会发生。
因此您需要x === 'c'
。
但是,您有多种逻辑。您确定要使用!== 'b'
而不是=== 'b'
吗?这意味着,如果您仅使用“或”运算符,则通过“ b”以外的任何条件都可以将条件解析为true。
最后,您可能是说:
if( x === 'a' || x === 'b' || x === 'c')
可以减少到
if (['a', 'b', 'c'].includes(x))
或者实际上
if (/^[abc]$/.test(x))
答案 1 :(得分:0)
您的最后一个条件是'c'
,即truthy。
Boolean('c');
// true
答案 2 :(得分:0)
您正在使用OR语句。显然x(=123) !== 'b'
和'c'
也是如此。
所以这就是为什么结果是123
答案 3 :(得分:-1)
将if语句修改为以下内容 if(x ==='a'|| x!=='b'|| x!=='c')