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会变成真的?
答案 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)
始终返回false
(i
为0
除外)。
请改为尝试:
if (!(i%2))
答案 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)”