!(i%2)vs(i%2 == 0)之间有什么区别?

时间:2016-02-04 07:45:26

标签: javascript loops if-statement

for (i=0;i<10;i++) {
if (i%2 == 0)
console.log( i + "is even number")
else
console.log(i + "is not even")

}

工作,但

for (i=0;i<10;i++) {
if (!i%2)
console.log( i + "is even number")
else
console.log(i + "is not even")

}

不工作,为什么? 什么时候我%2会变成真的?

3 个答案:

答案 0 :(得分:4)

尝试以下

for (i=0;i<10;i++) {
if (!(i%2))
console.log( i + "is even number")
else
console.log(i + "is not even")
}

您需要查看operator precedence

出了什么问题?

根据运算符优先级!i%2评估为(!i)%2因此,对于大于0的i的每个值,!i变为false和{{1是0

答案 1 :(得分:2)

因为逻辑NOT !)运算符优先于余数运算符(%)。所以你的代码实际上被评估为:

((!i)%2)

始终返回falsei0除外)。

请改为尝试:

if (!(i%2))

请参阅Operator Precedence

答案 2 :(得分:1)

首先将变量定义为i%2,然后它可以作为布尔值。

for (i=0;i<10;i++) {
var a = i%2;
if (!a)
console.log( i + "is even number")
else
console.log(i + "is not even")
}

或括在括号中。它没有用,因为在做%2之前它首先被解释为“不是我”,它应该首先计算,即“不(i%2)”