你认为……有很大的不同吗?In和for循环?你更喜欢用哪种for ?为什么?
假设我们有一个关联数组数组:
var myArray = [{'key': 'value'}, {'key': 'value1'}];
所以我们可以迭代:
for (var i = 0; i < myArray.length; i++)
And:
for (var i in myArray)
我看不出有什么大的不同。是否存在性能问题?
你认为……有很大的不同吗?In和for循环?你更喜欢用哪种for ?为什么?
假设我们有一个关联数组数组:
var myArray = [{'key': 'value'}, {'key': 'value1'}];
所以我们可以迭代:
for (var i = 0; i < myArray.length; i++)
And:
for (var i in myArray)
我看不出有什么大的不同。是否存在性能问题?
当前回答
根据jsperf,更短且最好的代码是
keys = Object.keys(obj);
for (var i = keys.length; i--;){
value = obj[keys[i]];// or other action
}
其他回答
数组上的For in循环与Prototype不兼容。如果您认为将来可能需要使用该库,那么坚持使用for循环是有意义的。
http://www.prototypejs.org/api/array
根据使用的循环类型和浏览器的不同,会有不同的性能。
例如:
for (var i = myArray.length-1; i >= 0; i--)
在某些浏览器上几乎是以下速度的两倍:
for (var i = 0; i < myArray.length; i++)
然而,除非你的数组是巨大的,或者你不断地循环它们,所有的都足够快。我严重怀疑数组循环是你的项目(或任何其他项目)的瓶颈。
2012年所有主流浏览器当前版本的更新答案- Chrome, Firefox, IE9, Safari和Opera支持ES5的原生array.forEach。
除非你有理由在本地支持IE8(记住ES5-shim或Chrome框架可以提供给这些用户,这将提供一个适当的JS环境),否则使用语言的正确语法会更干净:
myArray.forEach(function(item, index) {
console.log(item, index);
});
array.forEach()的完整文档在MDN上。
如果你真的想加快你的代码,那该怎么做呢?
for( var i=0,j=null; j=array[i++]; foo(j) );
它有点像在for语句中有while逻辑而且它不那么冗余。firefox也有Array。forEach和Array.filter
小心! ! 我在Mac OS中使用Chrome 22.0,我在每个语法上都有问题。
我不知道这是浏览器问题,javascript问题或代码中的一些错误,但这是非常奇怪的。在物体之外,它工作得很完美。
var MyTest = {
a:string = "a",
b:string = "b"
};
myfunction = function(dicts) {
for (var dict in dicts) {
alert(dict);
alert(typeof dict); // print 'string' (incorrect)
}
for (var i = 0; i < dicts.length; i++) {
alert(dicts[i]);
alert(typeof dicts[i]); // print 'object' (correct, it must be {abc: "xyz"})
}
};
MyObj = function() {
this.aaa = function() {
myfunction([MyTest]);
};
};
new MyObj().aaa(); // This does not work
myfunction([MyTest]); // This works