while(0 = 0)的计算结果为false

时间:2010-06-11 15:04:14

标签: javascript operators

b=10;
while(a=b) {
  b--;
  if(b==-10)break;
}

B从10变为-10。 在我的世界中,while语句a = b应该始终为真(因为分配总是“顺利”)。事实并非如此。 循环停止时,b的值为0.

在我的世界中,当if语句启动时,它应该传递0并一直到-10。

我误解了一些重要的东西吗? (在IE8和Adobe Acrobat中测试的代码)

9 个答案:

答案 0 :(得分:29)

(0 = 0) == 0 == false

答案 1 :(得分:21)

分配的值是指定的值,因此您可以将分配a = b = 2链接起来,因此当b=0时,a=b的值为0。

答案 2 :(得分:9)

0是一个假值,0 == false为真,所以只要b命中0,那么a = b的计算结果为false,循环就会中断。

一个简单的解决方法是

while ((a=b) > -10) {

或者在这种情况下,由于break;语句,您可以使用

while (true) {

答案 3 :(得分:4)

是的,因为赋值的值是赋值表达式的值。哪个是0,评估为假。

答案 4 :(得分:3)

显然,如果(0)等于if(false)。

所以,如果(a = b)为真,只有当b等于某个在转换为布尔值时才会变为真的东西。

所以,如果说a和b是同一类型,如果b不为零,则认为是真的。

我不明白为什么这个代码?

答案 5 :(得分:1)

0在javascript中是假的,当b到0时a = b返回0,因此javascript读取为false。

答案 6 :(得分:1)

  

while语句,a = b,应该始终为真(因为赋值总是“顺利”)。

将回报值视为对操作成功的确认通常不是一个好主意。 继续执行您的代码表明作业进展顺利。

值得注意的是,您的直觉实际上是向后来自Unix shell脚本中的标准,其中0表示A-OK!而非零表示其他结果。

现在像Exceptions这样的东西可以用来表示执行中的问题,有更好的机制可以用于此。

答案 7 :(得分:0)

while循环期望条件,即while(条件)并处理true or false 因此,上面的循环转换为while(a),因为循环的条件是a的值。

a达到0时,您的循环会中断。

答案 8 :(得分:0)

实际上,0 = 0会给出0的结果,该结果被解释为false。换一种说法 while(0 = 0)与while(0)几乎相同,它会打破循环。