神秘'函数'连接到阵列
Mysterious 'function' being attached to array
我有以下代码:
// 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++) {
// ...
}
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 用嵌套函数和默认函数定义函数
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- JQuery合并了keyup和focusout两个函数
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 我可以在json对象中添加一个函数吗
- AngularJS:我可以跳过函数参数回调吗
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- jquery点击函数select&取消选择
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- Node.js v6.2.0类扩展不是函数错误
- 比较从函数和生成的日期对象
- 与直接阵列访问相比,使用函数检索配置信息
- 神秘'函数'连接到阵列