神秘'函数'连接到阵列

Mysterious 'function' being attached to array

本文关键字:阵列 函数 神秘 连接      更新时间:2023-09-26

我有以下代码:

    // 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]);
    }

控制台日志显示:

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;
}

它看起来是一个新的数组元素,键为findIndex,值为该函数。

有人知道这是什么吗?为什么会出现?

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

for(var i = 0; i < sets.length; i++) {

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

for(var i = 0, len=sets.length; i < len; i++) {

这是因为Javascript中带有for循环的in运算符循环对象的属性,而不仅仅是"数组"中的对象。我之所以说"数组",是因为Javascript数组实际上只是为数组中的每个条目创建数字属性的对象(以及一些其他方法和属性,如.length)。

正如Dennis所提到的,您将希望使用传统的for循环来仅在数组中的对象上循环。

还要注意的是,这种for循环的一个简单优化是在循环开始时初始化一次长度值,而不是每次评估array.length

for (var i = 0, len = sets.length; i < len; i++) {
    // ...
}