当条件检查变量变为0时,为什么while循环停止?

时间:2016-10-11 10:11:31

标签: javascript

有人能解释一下下面会发生什么吗?

var i = 5;
while(--i){
  console.log(i);
}

事情是while循环一直持续到1(控制台记录4,3,2,1)

我知道如果我检查1或0为真,我会得到以下结果

  

0 == true>假

     

1 == true>真

我不明白当数字是4时会发生什么?这怎么样?

由于检查4是否会产生以下结果

  

4 == true>假

2 个答案:

答案 0 :(得分:3)

如上所述:

4是javascript中的真值:

if (4) {
    console.log(true);    
} else {
    console.log(false);
}

这将打印true

另一种看法:

0 and true = false
1 and true = true
4 and true = true

truthy的文档:https://developer.mozilla.org/en/docs/Glossary/Truthy

  

在JavaScript中,truthy值是在布尔上下文中求值时转换为true的值。所有值都是真实的,除非它们被定义为假(即,除了false,0,"",null,undefined和NaN)。

4 != true的原因是真值被强制转换为数字。所以事实上4 == true + true + true + true

答案 1 :(得分:2)

任何非零数字都被视为TRUE。

所以在你的循环中,i从5开始。在第一次迭代i减少1(由--i),结果(4)被测试为真正。因此,它进入WHILE循环并记录i(4)的值。然后WHILE循环返回start并再次将i的值减1,变为3.这也被视为TRUE,从而再次进入循环。

只有i达到0才会被视为FALSE,从而退出WHILE循环。