Javascript 杰克究竟为什么会出现在警报框中?
谁能告诉我为什么“杰克”这个词会从警报框里跳出来Javascript 杰克究竟为什么会出现在警报框中?,javascript,Javascript,谁能告诉我为什么“杰克”这个词会从警报框里跳出来 多谢各位 Simple-数组是javascript中的对象,因此通过添加: Object.prototype.jack = {}; var a = [1,2,3]; for(var number in a){ alert(number); } 您已将可枚举属性“jack”添加到所有对象(并由此添加到所有数组) 一旦创建了数组“a”并遍历了它的所有属性 Object.prototype.jack={}; 你肯定会收到“杰克”警报。为
多谢各位 Simple-数组是javascript中的对象,因此通过添加:
Object.prototype.jack = {};
var a = [1,2,3];
for(var number in a){
alert(number);
}
您已将可枚举属性“jack”添加到所有对象(并由此添加到所有数组)
一旦创建了数组“a”并遍历了它的所有属性
Object.prototype.jack={};
你肯定会收到“杰克”警报。为了避免它出现,您可以使用.hasOwnProperty()
来确保未继承所有警报属性。或者使用常规的
for(var number in a)
for(变量i=0;i
循环。因为您没有检查
jack
是否是从prototype
继承的属性。请尝试以下方法:
for(var i=0; i < a.length; i++)
循环在属性上迭代。它只建议(Mozilla和其他权威机构)在对象上使用,但不建议在数组上使用。如果您坚持,这是对对象进行迭代的正确方法,它将适用于数组(大多数情况下)
以普遍接受的方式进行
for (var number in a) {
if (Object.prototype.hasOwnProperty.call(a, number)) {
alert(a[number]); // shows 1 then 2 then 3
}
}
,但您应该使用常规的
for
循环…因为jack
是一个可枚举属性,并且您正在迭代a
的所有属性。相关报道:但是为什么在这种情况下杰克会出来?但是为什么在这种情况下杰克会出来?原型上的财产不是自有财产。因此,如果我们询问a.hasOwnProperty('jack')它将返回false。
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
}