我认为 i--
是 i = i - 1
的简写,但我发现两者的计算结果不同:
var i = 1;
while (i = i - 1) {…}
在本例中,i
为 0
,其计算结果为 false
。这按预期工作。
var i = 1;
while (i--) {…}
i
应为 0
且计算结果为 false
,但事实并非如此。它的计算结果为true
。这是一个错误,还是有原因?
最佳答案
当您执行i--
时,将使用i
的值,然后递减。但在前缀 --1
运算符的情况下,情况有所不同,如下所示,它将递减并然后使用。
var i = j = 1;
console.log(i--); // still 1
console.log(i); // now 0
console.log(--j) // 0
console.log(j); // again 0
为什么解释以上内容?
向您展示当您使用前缀和后缀运算符时实际发生的情况,尽管它主要与问题无关,但我认为了解一下会更好。
现在是实际答案
i = i - 1
的作用是在遇到代码时立即进行计算,因此 i
实际上是 0
,您可以在这种情况下,假设它的作用类似于前缀递减运算符,但当 条件 中使用时,
第一次被评估,然后当第二次检查 i--
仍然是 1
>whilewhile
条件 时,它是 0
,即是假,因此循环结束。
关于javascript - i-- 和 i = i-1 的评估不一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27742676/