为什么0 && 0%2 === 0返回0而不是true?并且数字0不会落在filter()之后的数组中。

/*
    0%2 returns 0;
    0 && 0%2 returns 0;
    0 && 0%2 === 0 returns 0 instead true;
    0 === 0 returns true. I am confused.
*/
const y = ['0','1','2','3','4','5']
.map(x => +x)                       // [0,1,2,3,4,5]
.filter(x => x && x % 2 === 0)      // [2,4] ,instead [0,2,4]
.reduce((accum, item)=> accum * item); // 8
console.log(y); //8

最佳答案

为了说明一点,您在这里错过了方括号:

 0 && 0%2 returns 0;
 0 && 0%2 === 0 returns 0 instead true;


带括号:

(0 && 0%2) === 0 returns true;


发生这种情况是因为在您的示例中,比较发生在逻辑和之前。所以基本上:

0%2 === 0 returns true;
0 && true returns 0;

关于javascript - 为什么过滤器不捕获0并返回两个数字,而是三个呢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52303001/

10-12 07:14