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

Why does the while loop stop when condition check variable becomes 0?

本文关键字:循环 while 0时 条件 检查 变量 为什么      更新时间:2023-09-26

谁能告诉我下面发生了什么?

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

问题是while循环一直持续到1 (console logs 4,3,2,1)

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

0 == true> false

1 == true>

我不明白的是,当数字是4之类的时候会发生什么?这到底是怎么回事?

因为检查4是否为true将传递以下结果

4 == true> false

如上所述:

4在javascript中是真值:

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

这将打印true

另一种理解方式:

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

关于真相的文档:https://developer.mozilla.org/en/docs/Glossary/Truthy

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

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

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

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

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