javascript - Javascript 增强 for...in 循环中的奇怪行为

标签 javascript for-loop foreach

我正在制作一个带有 canvas 标签的 Javascript 游戏,我正在使用增强的 for 循环来更新玩家位置。

简而言之:

var actors = new Array();

var player = new Actor(0, 0, img);

actors[0] = player;

function update_positions() {
    //position 1
    for(var a in actors) {
        //position2
        a.xpos += a.xvel;
        a.ypos += a.yvel;
    }
}

就在位置 1 的 for 循环之外,我可以访问 actors[0].xvel 的正确值。在位置 2 的 for 循环内,a.xvel 未定义。有人可以向我解释发生了什么吗?

最佳答案

for...in语句旨在用于遍历对象属性,通过查看您的代码似乎actors 是一个数组(您正在设置索引为0< 的初始元素)。

这个声明也将crawl up原型(prototype)链,如果你扩展了 Array.prototype 那些属性将被迭代,并且迭代的顺序也是不保证的。

我建议您避免使用 problems并使用普通的 for 循环进行迭代:

for (var i = 0; i < actors.length; i++) {
    actors[i].xpos += actor.xvel;
    actors[i].ypos += actor.yvel;
}

如果我错了,actors 不是数组,我建议您使用 hasOwnProperty 方法,以确保该属性存在于对象本身,不在原型(prototype)链的某个地方:

for (var name in object) {
  if (object.hasOwnProperty(name)) {
    //
  }
}

关于javascript - Javascript 增强 for...in 循环中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1885317/

相关文章:

javascript - 在Node js中读取多个文件并发送JSON数据

java - 如何使用增强的 for 循环初始化数组?

php - 数组和循环管理

java - For-Each 循环中的限制

javascript - 如何在Asp.Net Mvc4中检查验证码后传递Email Id值?

javascript - 向旧浏览器隐藏 Javascript 代码

python - 如何使用 2 个列表打印 for 循环?

javascript - 我可以从内部函数中屈服吗?

.net - 如何使用 "For Each"循环修改字符串?

javascript - 增加 div 按钮的大小