b=10;
while(a=b) {
b--;
if(b==-10)break;
}
B从10变为-10。 在我的世界中,while语句a = b应该始终为真(因为分配总是“顺利”)。事实并非如此。 循环停止时,b的值为0.
在我的世界中,当if语句启动时,它应该传递0并一直到-10。
我误解了一些重要的东西吗? (在IE8和Adobe Acrobat中测试的代码)
答案 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)几乎相同,它会打破循环。