Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/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_Arrays_Google Chrome - Fatal编程技术网

Javascript 用于阵列原型上的(阵列中的键)循环

Javascript 用于阵列原型上的(阵列中的键)循环,javascript,arrays,google-chrome,Javascript,Arrays,Google Chrome,我不知道如何准确地描述这个问题,但我发现这个问题非常复杂 基本上,我在chrome的开发者工具控制台中做了这个测试 for (var request in [0,1,2]) { console.log(request);} 0 1 2 compare 最后四行都是for循环的输出。 在for循环期间,请求获得了比较值 我想知道这是否是chrome中的一个bug。用于。。。在…中,迭代对象的可枚举属性,不用于数组索引。数组索引也是可枚举属性,但当您发现任何不安全地添加到数组中的内容时,pro

我不知道如何准确地描述这个问题,但我发现这个问题非常复杂

基本上,我在chrome的开发者工具控制台中做了这个测试

for (var request in [0,1,2]) { console.log(request);}

0
1
2
compare 
最后四行都是for循环的输出。 在for循环期间,请求获得了比较值


我想知道这是否是chrome中的一个bug。

用于。。。在…
中,迭代对象的可枚举属性,不用于数组索引。数组索引也是可枚举属性,但当您发现任何不安全地添加到
数组中的内容时,prototype也将返回

要在ES5浏览器中将(不可枚举)方法安全地添加到
数组.prototype
,您可以使用
对象.defineProperty
,例如:

Object.defineProperty(Array.prototype, 'compare', {
    value: function() {
        ...
    }
});

这将停止
,等待。。。在
中,从中断开始,但当感兴趣的变量是数组时,它仍然是作业的错误工具。

用于。。。在…
中,迭代对象的可枚举属性,不用于数组索引。数组索引也是可枚举属性,但当您发现任何不安全地添加到
数组中的内容时,prototype也将返回

要在ES5浏览器中将(不可枚举)方法安全地添加到
数组.prototype
,您可以使用
对象.defineProperty
,例如:

Object.defineProperty(Array.prototype, 'compare', {
    value: function() {
        ...
    }
});

这将停止
,等待。。。在
中,从中断开始,但当感兴趣的变量是数组时,它仍然是错误的工具。

最好使用索引for循环。 For..in还枚举继承的属性等

var request = [0,1,2];
for (var i = 0; i < request.length; i++) {
   console.log(request[i]);
}
var请求=[0,1,2];
对于(变量i=0;i
这个问题的首要答案是:


比我做得更好:

最好使用索引for循环。 For..in还枚举继承的属性等

var request = [0,1,2];
for (var i = 0; i < request.length; i++) {
   console.log(request[i]);
}
var请求=[0,1,2];
对于(变量i=0;i
这个问题的首要答案是:

比我能做的更好:

在你的例子中,全局“对象原型”作为一个为它声明的比较函数,例如

object.prototype.compare = function (a,b) {return a === b}
…因此,每当您迭代一个对象(数组是一种对象)时,您也会迭代其原型的“比较”函数。。。它是它的“成员”。

在您的例子中,全局“对象原型”作为为它声明的比较函数,例如

object.prototype.compare = function (a,b) {return a === b}

…因此,每当您迭代一个对象(数组是一种对象)时,您也会迭代其原型的“比较”函数。。。它是它的一个“成员”。

正如其他人指出的那样。。in
不是遍历数组的最佳方式。如果出于某种原因坚持使用它-请使用方法确定该属性确实属于数组:

var arr = [0,1,2];

for (var request in arr ) { 
    if (arr.hasOwnProperty(request)) console.log(request);
}

正如其他人指出的,
。。in
不是遍历数组的最佳方式。如果出于某种原因坚持使用它-请使用方法确定该属性确实属于数组:

var arr = [0,1,2];

for (var request in arr ) { 
    if (arr.hasOwnProperty(request)) console.log(request);
}

for..in
不适用于数组,使用常规
for
循环:
var arr=[1,2,3];for(var i=0;这正是您不应该使用for..in来循环数组的原因。
for..in
仅用于对象。
for..in
不适用于数组,请使用常规
for
循环:
var arr=[1,2,3];for(var i=0;这正是您不应该使用for..in来循环数组的原因。
for..in
仅用于对象。谢谢,刚刚确认比较已被其他teammember@LukaYu一定要打他的头。另外,你自己也要打一个,打循环中的谢谢,刚刚确认比较已被其他人覆盖teammember@LukaYu一定要打他的头。另外,你自己也要打一个,打循环中的