-2
Object.prototype.jack = {};

var a = [1,2,3];

for(var number in a){
    alert(number);
}

谁能告诉我为什么“杰克”这个词会从警告框中跳出来?

非常感谢!

4

3 回答 3

5

简单 - 数组是 javascript 中的对象,因此通过添加:

Object.prototype.jack={};

您已经为所有对象(以及所有数组)添加了一个可枚举属性“jack”。

一旦创建了你的数组“a”并遍历它的所有属性

for(var number in a)

您一定会收到“千斤顶”警报。为了避免它出现,您可以使用.hasOwnProperty()确保所有警报属性都没有被继承。或使用常规

for(var i=0; i < a.length; i++)

环形。

于 2013-08-20T00:58:13.787 回答
3

for..in循环遍历属性。仅推荐(Mozilla 和其他权威机构)将其用于对象,而不是数组。如果您坚持,这是迭代对象的正确方法,它将适用于数组(大多数情况下)。

for (var number in a) {
    if (Object.prototype.hasOwnProperty.call(a, number)) {
        alert(a[number]); // shows 1 then 2 then 3
    }
}

以普遍接受的方式做到这一点,

for (var i=0; i<a.length; i++) {
    alert(a[i]);  // same as above
}

我个人的偏好是:

for (var val, i=0; val = a[i]; i++) {
    alert(val);  // same as above
}
于 2013-08-20T01:04:54.457 回答
0

因为您没有检查是否jack是继承自的属性prototype。试试这个:

Object.prototype.jack={};

var a = [1,2,3];

for (var number in a) {
    if (a.hasOwnProperty(number)) {
        alert(number);
    }
}
于 2013-08-20T00:58:15.627 回答