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

Javascript 为什么当条件检查变量变为0时while循环停止?,javascript,Javascript,有人能解释一下下面发生了什么吗 var i = 5; while(--i){ console.log(i); } 问题是while循环一直持续到1(控制台日志4,3,2,1) 我知道如果我检查1或0为真,我将得到以下结果 0==真>假 1==真>真 我不明白的是,当数字大约是4时会发生什么?这到底是怎么回事 因为检查4是否为true将得到以下结果 4==真>假 如上所述: 4是javascript中的真实值: if (4) { console.log(true); } el

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

var i = 5;
while(--i){
  console.log(i);
}
问题是while循环一直持续到1(控制台日志4,3,2,1)

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

0==真>假

1==真>真

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

因为检查4是否为true将得到以下结果

4==真>假

如上所述:

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的文档:

在JavaScript中,truthy值是在布尔上下文中计算时转换为true的值。除非定义为falsy(即,除false、0、“、null、未定义和NaN外),否则所有值都是真实的


4!=true
是将真值强制转换为数字。因此,实际上
4==true+true+true+true
任何非零数字都被视为true

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


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

4也是一个值,它从5开始,并在每个步骤中以1递减。当它为0时,表示为false,它停止。
console.log(布尔值(4))
返回
true
。只有
0
为false。其他一切都是真的。while循环的基本形式是:
while(-i>0){…}
@progy\u rock不仅
0
->,而且条件是
while(Boolean(-i)==true)