【问题标题】:What is the difference between !( i%2) vs (i%2 == 0)?!(i%2) 与 (i%2 == 0) 有什么区别?
【发布时间】:2016-05-13 17:23:08
【问题描述】:
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")

}

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

【问题讨论】:

  • !(i%2) - 括号很重要

标签: javascript loops if-statement


【解决方案1】:

尝试关注

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 并且 false%2 为 0

【讨论】:

  • 附注不知道为什么正确的答案会被否决
  • @nikhil 如果我放了会发生什么!一世 ?我的意思是它是如何解释的?
  • 我猜 OP 是在问差异,也许它没有提供这样的功能!
  • @RayonDabre - OP 知道 i%2 == 0,但是,对为什么另一个不工作感到困惑。因此,有针对性的 OP 的困惑
【解决方案2】:

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

((!i)%2)

这将始终返回 falsei0 时除外)。

试试这个:

if (!(i%2))

Operator Precedence

【讨论】:

  • 如果 i = 0,这意味着 !false % 2 => 1(true)。如果 i = 1,则意味着 !true % 2 => 0 (false)
【解决方案3】:

先定义一个变量为 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 之前首先被解释为“not i”,因此应该首先计算它,即“not (i % 2)”

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 2011-03-21
    • 2021-08-25
    • 2021-12-30
    相关资源
    最近更新 更多