如何使用&&,||一起

时间:2018-12-24 12:10:43

标签: javascript arrays operators

我不知道为什么以下代码返回false。

var pets = ['cat', 'dog', 'bat'];
console.log(pets.includes(('cat' && 'monkey') || 'bat' ));

由于“蝙蝠”位于宠物阵列中,我认为这返回了真。

知道为什么这不起作用吗?

3 个答案:

答案 0 :(得分:2)

这是因为('cat' && 'monkey') || 'bat'给出了monkey。它给出monkey的原因是因为'cat' && 'monkey'monkey都被定义并且两个定义的值都使用catmonkey表达式的求值为&& ,则采用第二个值,即monkey。并且在评估'monkey' || 'bat'时,它给出了第一个值monkey,在这种情况下,这两个值也都被定义了,但是在||表达式中,它给出了第一个定义的值,即monkey在这种情况下。

这是个谜,

pets.includes(('cat' && 'monkey') || 'bat');
//becomes
pets.includes('monkey'); //which is false

var pets = ['cat', 'dog', 'bat'];
console.log(('cat' && 'monkey') || 'bat');
console.log(pets.includes(('cat' && 'monkey') || 'bat'));

答案 1 :(得分:0)

这是因为&&||旨在比较布尔表达式。您实际要做的是:

console.log((pets.includes('cat') && pets.includes('monkey')) || pets.includes('bat'));

答案 2 :(得分:0)

要真正检查pets是否包含其他两个值,您需要使用另一种方法,并使用Array#every迭代该值,并使用Array#includes检查回调中的单个值。

var pets = ['cat', 'dog', 'bat'];

console.log(['cat', 'monkey'].every(animal => pets.includes(animal)))           // false
console.log(['cat', 'monkey'].every(animal => pets.includes(animal)) || 'bat'); // 'bat'