javascript - 数组迭代陷阱

标签 javascript

我总是得到意外输出的这段代码出了什么问题?

var foo = [3,4,5];

for ( var i in foo ) {
      if ( i == 1 ) {
     foo.unshift(6,6);
         }
  document.write('item: '+foo[i]+"<br>")
  }
output:
item: 3
item: 6
item: 3

我能为此找个合适的理由吗?谢谢

最佳答案

我在 IE8 中得到的输出这是

item: 3
item: 6
item: 3
item: 4
item: 5

这是正确的。如果你想在 unshift 之后完全更新值使用另一个循环

var foo = [3,4,5];
  for ( var i in foo ) {
      if ( i == 1 ) {
     foo.unshift(6,6);
         }
  }
  for ( var i in foo )
    document.write('item: '+foo[i]+"<br>")

哪个会给出

item: 6
item: 6
item: 3
item: 5
item: 4

在您调用 document.write('item: '+foo[i]+"<br>") 时的代码中与 i = 0你的foo[0]3 对于 i=1unshift 之后foo == [6,6,3,4,5]foo[1]6 .

关于javascript - 数组迭代陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15963614/

相关文章:

javascript - 使用 jQuery 重新加载对象并间隔触发函数

javascript - 带中断的 CSS 页面布局

java - 如何在纯Rhino对象模型中执行 "Object.defineProperty"?

javascript - 如何最好地在 JavaScript 中重构这组跨多个方法的重复触发调用?

javascript - 读取二进制文件并进行 base64 编码

javascript - 隐藏后div框能否顺利重新排列,如何?

javascript - 循环遍历数组以在 react 路由器中创建路由

c# - 如何在asp.net web表单中添加弹出窗口

javascript - 即使在调整浏览器窗口大小后,如何在 div 底部启动 div 的滚动条

javascript - jQuery 打开外部切换展开,默认关闭