我有以下代码:
// 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
,值为该函数。
有人会知道这是什么以及它出现的原因吗?
答案 0 :(得分:6)
您应该使用传统的for
循环来迭代数组,否则您可能会选择由您或第三方代码添加的属性(在本例中为新函数)。
for(var i = 0; i < sets.length; i++) {
正如其他人所提到的,缓存长度可以提供最佳性能:
for(var i = 0, len=sets.length; i < len; i++) {
答案 1 :(得分:4)
这是因为Javascript中带有for循环的in
运算符循环遍历对象的属性,而不仅仅是“数组”中的对象。我说“数组”因为Javascript数组实际上只是为数组中的每个条目创建数字属性的对象(以及一些其他方法和属性,如.length
)。
正如Dennis所说,你会想要使用传统的for循环来遍历数组中的对象。
另请注意,对此类for循环进行简单优化是在循环开始时初始化长度值,而不是每次都评估array.length
:
for (var i = 0, len = sets.length; i < len; i++) {
// ...
}