javascript forEach数组回调时间?
所以我在学习不同的数组迭代方法时遇到了一些奇怪的事情:javascript forEach数组回调时间?,javascript,Javascript,所以我在学习不同的数组迭代方法时遇到了一些奇怪的事情: [1,2,3].forEach(function(element,index,arr){ console.log(element,index); console.log(arr); arr.shift(); }) 所以你会认为这会产生: 1,0 [1,2,3] 2,1 [2,3] 3,2 [3] 然而,你会发现: 1 0 [1, 2, 3] 3 1 [2, 3] 我正在打印第三张照片,你最后才换掉了吗?
[1,2,3].forEach(function(element,index,arr){
console.log(element,index);
console.log(arr);
arr.shift();
})
所以你会认为这会产生:
1,0
[1,2,3]
2,1
[2,3]
3,2
[3]
然而,你会发现:
1 0
[1, 2, 3]
3 1
[2, 3]
我正在打印第三张照片,你最后才换掉了吗?这是因为arr回调发生在下一个项目的开头还是其他地方?因为它应该在之后对数组执行shift()?我意识到使用这种方法是一种“坏情况”,我只是好奇为什么会发生这种情况。数组的
.length
发生了变化。索引0
处与元素相邻的元素在.shift()
调用之后变为索引0
。数组的.length
已更改。与索引0
处的元素相邻的元素在调用.shift()
后变为索引0
。您的问题的答案在shift方法的文档中描述
根据来自的MDN
shift方法删除零索引处的元素并进行移位
连续索引处的值向下,然后返回删除的
价值如果length属性为0,则返回undefined
因此,一旦移位操作完成,原始数组将从
[1,2,3]
到[2,3]
,索引值从0
到1
递增。接下来,迭代循环的第三次迭代是不需要的,因为数组(2)的长度已经被遍历。您的问题的答案在shift方法的文档中描述
根据来自的MDN
shift方法删除零索引处的元素并进行移位
连续索引处的值向下,然后返回删除的
价值如果length属性为0,则返回undefined
因此,一旦移位操作完成,原始数组将从
[1,2,3]
到[2,3]
,索引值从0
到1
递增。接下来,迭代循环的第三次迭代是不需要的,因为数组(2)的长度已被遍历。不建议在迭代期间更改数组的长度…不建议在迭代期间更改数组的长度。。。