js循环:for 和 for in 的区别

两者在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。 哈哈~

你可能感兴趣的:(js循环:for 和 for in 的区别)