var each = function(obj, fn){
/**
*在这里写代码,要求构造一个迭代器,对数组,对象进行遍历
*完成下面要求输出的结果
*/
};try{
var data1 = [4,5,6,7,8,9,10,11,12];
var data2 = {
"a": 4,
"b": 5,
"c": 6
};

console.group(data1);

each(data1, function(o){
if( 6 == this )
return true;
else if( 8 == this )
return false;
console.log(o + ": \"" + this + "\"");
});

console.groupEnd(); /*------[执行结果]------ 1: "4"
2: "5"
4: "7" ------------------*/

console.group(data2);

each(data2, function(v, n){
if( 5 == this )
return true;
console.log(n + ": \"" + v + "\"");
});

console.groupEnd(); /*------[执行结果]------ a: "4"
c: "6" ------------------*/

}catch(e){
console.error("第1题执行出错,错误信息: " + e);
}

解决方案 »

  1.   

    this 是指针,不可能等于 整形
      

  2.   

    var each = function(obj, fn){
        /**
        *在这里写代码,要求构造一个迭代器,对数组,对象进行遍历
        *完成下面要求输出的结果
        */
        var toString = Object.prototype.toString,
         ret;
        for(var i in obj){
         if(toString(obj[i]) === "[object Object]" || toString(obj[i]) === "[object Array]"){
         ret = fn.call(obj[i], i, obj[i]);
         }else{
         ret = fn(i, obj[i]);
         }
         if(ret === true){
         continue;
         }else if(ret === false){
         break;
         }
        }
    };

    try{
        var data1 = [4,5,6,7,8,9,10,11,12];
        var data2 = {
            "a": 4,
            "b": 5,
            "c": 6
        };
        
        console.group(data1);
        
        each(data1, function(index, elem){
            if( 6 == elem )
                return true;
            else if( 8 == elem )
                return false;
            console.log(index + ": \"" + elem + "\"");
        });
        
        console.groupEnd();

        /*------[执行结果]------

        1: "4"
        2: "5"
        4: "7"

        ------------------*/
        
        console.group(data2);
        
        each(data2, function(index, elem){
            if( 5 == elem )
                return true;
            console.log(index + ": \"" + elem + "\"");
        });
        
        console.groupEnd();

        /*------[执行结果]------

        a: "4"
        c: "6"

        ------------------*/
        
    }catch(e){
        console.error("第1题执行出错,错误信息: " + e);
    }
      

  3.   

    var each = function(obj, fn){
        /**
        *在这里写代码,要求构造一个迭代器,对数组,对象进行遍历
        *完成下面要求输出的结果
        */
        var ret;
        for(var i in obj){
         ret = fn.call(obj[i], i, obj[i]);
         if(ret === true){
         continue;
         }else if(ret === false){
         break;
         }
        }
    };
      

  4.   


    你的输出结果不对啊 一个是data1的编号 不是1 2 3 还有一个是 data2返回的不是数字 是字母
      

  5.   

    什么意思 他说的对不对啊?
    但是题的意思是不让改 this 也就是说题出错了?
      

  6.   

    var foreach = function()
    {
        if(!Array.prototype.foreach)
        {
            Array.prototype.foreach = function(action)
            {
                for(var i = 0 ; i < this.length ; i ++) action(i,this[i]);
            }
        }
    }()var array = ['a','b','c','d','e','f','g','h'];
    array.foreach(function(index,n){alert(index+':'+n)})
      

  7.   

    我看错了对不住,还是有一点问题,就是data的编号 有可能改成1 2 4吗? 而不是从0开始的
      

  8.   

    谢谢你 我有个问题
      if(toString(obj[i]) === "[object Object]" || toString(obj[i]) === "[object Array]"){
                        ret = fn.call(obj[i], i, obj[i]);这句话是什么意思啊? 能帮我解答下吗
      

  9.   

    我写错了,正确写法应该是toString.call(obj[i]) === "[object Object]",这是判断obj[i]是不是一个普通的object对象,toString.call(obj[i]) === "[object Array]"是判断是否为一个数组。