3

我只是用 javascript for (key in obj) 语法遍历一个对象:

var myObj = { id:'1', number:'2', name: 'my' };

var i, item;
for (i in myObj) {
    item = myObj[i];
}

我在 firebug 调试器(firefox)中认识到第一次循环迭代将 i 设置为未定义,而第二次迭代将 i 设置为“id”。由于这种行为,我的代码中有一些问题。第一次迭代给出未定义是否正常?它与 JSON 符号、缺少原型等有关吗?

4

1 回答 1

0

它似乎工作得很好。但是,您可能希望使用.hasOwnProperty()来确保属性属于对象并且不被继承:

var myObj = { id: "1", number: "2", name: "my" };
var i,item;
for (i in myObj) {
     if (myObj.hasOwnProperty(i)) item = myObj[i];
}

通常,原生原型方法不会被枚举,仅仅是因为它们不可枚举。但是,如果您使用的是 Prototype 或 MooTools 等框架,则它们添加的方法将被枚举并在您的循环中看到。.hasOwnProperty()确保它们被忽略。

于 2012-11-11T02:59:07.927 回答