两者在W3C上的解释:
- for循环可以将代码块执行指定的次数
- for...in 语句用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)
从代码上看具体区别:
var array = ['a'];
// for:
for (var i = 0; i < array.length; i++) {
console.log(i, typeof(i)); // 0 "number"
console.log(array[i], typeof(array[i])); // a string
}
// for...in:
for (var i in array) {
console.log(i, typeof(i)); // 0 string
console.log(array[i], typeof(array[i])); // a string
}
从上面的代码中可以看出:两者在输出变量i时,前者是number类型,而后者是string类型。
var array = ['a'];
// 扩展js原生的Array类:数组去重
Array.prototype.unique = function(){
var res = [];
var json = {};
for(var i = 0; i < this.length; i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]] = 1;
}
}
return res;
}
for (var i = 0; i < array.length; i++) {
console.log(i, typeof(i)); // 0 "number"
console.log(array[i], typeof(array[i])); // a string
}
for (var i in array) {
console.log(i, typeof(i)); // 0 string // 第二次循环打印出来的: unique string
console.log(array[i], typeof(array[i])); // a string
/** 第二次循环打印出来的:
function (){
var res = [];
var json = {};
for(var i = 0; i < this.length; i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]] = 1;
}
}
return… "function"
**/
}
从上面的代码中可以看出:因为for...in不仅可以循环数组,还能循环对象,所以unique也被循环了出来。
so,在循环数组的时候还是用for循环吧,而在循环对象的时候再用for...in。 哈哈~
网友评论