Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 杰克究竟为什么会出现在警报框中?_Javascript - Fatal编程技术网

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
}