Object.prototype.jack = {};
var a = [1,2,3];
for(var number in a){
alert(number);
}
谁能告诉我为什么“杰克”这个词会从警告框中跳出来?
非常感谢!
Object.prototype.jack = {};
var a = [1,2,3];
for(var number in a){
alert(number);
}
谁能告诉我为什么“杰克”这个词会从警告框中跳出来?
非常感谢!
简单 - 数组是 javascript 中的对象,因此通过添加:
Object.prototype.jack={};
您已经为所有对象(以及所有数组)添加了一个可枚举属性“jack”。
一旦创建了你的数组“a”并遍历它的所有属性
for(var number in a)
您一定会收到“千斤顶”警报。为了避免它出现,您可以使用.hasOwnProperty()
确保所有警报属性都没有被继承。或使用常规
for(var i=0; i < a.length; i++)
环形。
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
}
因为您没有检查是否jack
是继承自的属性prototype
。试试这个:
Object.prototype.jack={};
var a = [1,2,3];
for (var number in a) {
if (a.hasOwnProperty(number)) {
alert(number);
}
}