神秘的'功能'被附加到阵列

wyq*_*syq 1 javascript jquery jquery-ui

我有以下代码:

    // button sets
    var sets = ['.diamond-colour','.diamond-cut','.diamond-clarity','.diamond-certificate'];
    // for each set
    for (set in sets){
        console.log('Set: '+set);
        console.log(sets[set]);
    }
Run Code Online (Sandbox Code Playgroud)

控制台日志显示:

Set: 0
.diamond-colour
Set: 1
.diamond-cut
Set: 2
.diamond-clarity
Set: 3
.diamond-certificate
Set: findIndex
function (value){
var ctr = "";
for (var i=0; i < this.length; i++) {
if (this[i] == value) {
return i;
}
}
return ctr;
}
Run Code Online (Sandbox Code Playgroud)

它似乎是一个新的数组元素,其键findIndex和值是该函数.

谁会知道这是什么以及为什么会出现?

Den*_*nis 6

您应该使用传统for循环来迭代数组,否则您可能会选择由您或第三方代码添加的属性(在本例中为新函数).

for(var i = 0; i < sets.length; i++) {
Run Code Online (Sandbox Code Playgroud)

正如其他人所提到的,缓存长度可提供最佳性能:

for(var i = 0, len=sets.length; i < len; i++) {
Run Code Online (Sandbox Code Playgroud)

  • `for(var i = 0; i <sets.length; i ++){`将远远超出`for(set in sets){`.这是一个性能测试:http://jsperf.com/jquery-each-vs-for-loops/2.另请注意,如果缓存数组的长度,它将执行得更快:`for(var i = 0,len = sets.length; i <len; i ++){` (2认同)