javascript - i-- 和 i = i-1 的评估不一样

标签 javascript evaluation

我认为 i--i = i - 1 的简写,但我发现两者的计算结果不同:

var i = 1;
while (i = i - 1) {…}

在本例中,i0,其计算结果为 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 >while 第一次被评估,然后当第二次检查 while 条件 时,它是 0,即是,因此循环结束。

关于javascript - i-- 和 i = i-1 的评估不一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27742676/

相关文章:

javascript 不评估输入框中的制表符

javascript - 如何将相减后的值四舍五入到小数点后两位?

javascript - postgres 与 node.js 连接中的 SASL 错误

php - 将 div 的内容转换为图像

javascript - 如何在 IOS 共享菜单中显示我的 cordova 应用程序?

java - 如何测试java应用程序的性能?

javascript - 无法从 fs.createWriteStream() 捕获异常

list - 如何从对象引用读取槽而不评估指针

programming-languages - 急切求值/应用顺序和懒惰求值/正常顺序

javascript - 短路评估令