关于优化for-in语句
about optimizing for-in statement
我读了一篇叫做优化杀手的文章,在5.2.3中。对象包含可枚举数组下标,它表示:
解决方法:总是使用Object。键,并使用for循环遍历数组。如果你真的需要整个原型链中的所有属性,创建一个独立的辅助函数:
function inheritedKeys(obj) {
var ret = [];
for(var key in obj) {
ret.push(key);
}
return ret;
}
我不明白这是什么意思。在上面的代码中,仍然有一个for...in
,所以函数inheritedKeys不能被优化,它怎么可能是一个孤立的辅助函数呢? 这只是一个关于如何使用for in循环从对象获取键的例子。他实际上告诉你,为了让它更快,你应该使用Object。键,当你想获取一个对象的键时。
这是测试性能。http://jsperf.com/forintest
所以不要用这个来检索对象键
function inheritedKeys(obj) {
var ret = [];
for(var key in obj) {
ret.push(key);
}
return ret;
}
var myobject= {"1":"a","2":"b"};
var calculation = inheritedKeys(myobject);
用这个代替,它更干净,更容易阅读,更快
var myobject= {"1":"a","2":"b"};
var calculation = Object.keys(myobject);
下面是一个比较for在使用with array和普通for循环中的测试。 http://jsperf.com/forinarray
你可以看到for循环要快得多。
不要用这个
function iteratesOverArray() {
var arr = [1, 2, 3];
var newArr = [];
for (var index in arr) {
newArr.push(index);
}
return newArr;
}
var arr = iteratesOverArray();
用这个代替
function iteratesOverArray() {
var arr = [1, 2, 3];
var newArr = [];
for (var i=0,l=arr.length-1;i<=l;i++) {
newArr.push(i);
}
return newArr;
}
var arr = iteratesOverArray();
相关文章:
- 如何使用for in循环在javascript中显示对象中的对象
- for.in循环在非数字索引“clean”和“remove”上循环
- JavaScript For循环与For in不起作用
- Javascript for.in 对象属性
- 在 JavaScript 中使用 for in 循环从对象中获取值
- 如何使用for循环语句通过Ajax发送大数据数组
- 将for.in替换为lodash版本
- hasOwnProperty在For in循环中总是返回False
- Why For-in循环返回'arg'当循环为空时
- 获取for in循环中对象的名称,用作另一个对象的键
- Javascript数组中未定义的值是否使用任何内存或在for in循环中迭代
- 使用for/in循环的javascript过滤器
- Understanding For-in Loop
- 使用“for in”的最佳方式
- 在对象内部使用 for-in 循环来访问其成员
- JavaScript for in - 从主对象获取、组合和处理数组
- JavaScript: else 语句在 for.in 循环中破坏了我的 if 语句
- IE9中的XML DOM子节点不支持for.in语句
- JavaScript 'for in' 语句给出不可预测的结果
- 关于优化for-in语句