gpt4 book ai didi

javascript - javascript(ECMAScript) 赋值运算符如何工作

转载 作者:行者123 更新时间:2023-11-28 00:06:20 25 4
gpt4 key购买 nike

当我初始化数组时,我发现了一个奇怪的情况。

JS代码:

var arr = [1, 2, 3, 4, 5];

for(var i=0, arr2=[]; i < 5; arr2[i] = arr[i++])
console.log(arr2, i);

输出:

[] 0
[1] 1
[1, 2] 2
[1, 2, 3] 3
[1, 2, 3, 4] 4

arr2 初始化为 [1, 2, 3, 4, 5] 这就是我想要的

看这段代码:

for(var i=0, arr2=[]; i < 5; arr2[i++] = arr[i])
console.log(arr2, i);

此代码将 arr2 初始化为 [2, 3, 4, 5, undefined]

我认为 ++ 运算符在下一行之前运行,并且两个代码将相同。

但是,它的运作方式有所不同。为什么会出现这种情况?

添加说明

我认为 for 循环都是这样运行的

var i = 0;
var arr2 = [];
check i < 5
console.log(arr2, i);

arr2[i] = arr[i];
i = i + 1;

check i < 5
....skip

这个想法错了吗?

有什么区别

'arr2[i] = arr[i++];' and
'arr2[i++] = arr[i];'

最佳答案

编辑:删除了代码片段,因为问题代码现已修复

现在,您的问题当前的问题不是前缀或后缀表示法,而是 for 循环的表达式(特别是arr2[i] = arr[i++] 部分)将在循环周期完成后执行。这就是为什么您的 arr2 数组在第一次迭代中为空,索引都很好,但赋值尚未发生。

完整的 for 语法,如Mozilla Developer Network所述。是

for ([initialization]; [condition]; [final-expression])
statement

带有[final-expression]的注释:

An expression to be evaluated at the end of each loop iteration. This occurs before the next evaluation of condition. Generally used to update or increment the counter variable.

要扩展您编辑的有关后缀位置差异的问题:

i++ 将在下次使用后递增 i。因此,假设起始值为 i=3 意味着

arr[i] = arr2[i++] --> arr[3] = arr2[3]

完成后,i 增加到 4

相反,i 在确定 arr 索引后递增,因此在访问 arr2 时它已经具有递增的值:

arr[i++] = arr2[i] --> arr[3] = arr2[4]

关于javascript - javascript(ECMAScript) 赋值运算符如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31311284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com