首页 > 技术文章 > js 判断确切判断Array和Object

pixs-union 2017-08-16 14:27 原文

 js的数组其实是特殊的对象。

这就导致:

  typeof [1,2,3] === 'object'

  [1,2,3] instanceof Object  和 [1,2,3] instanceof Array 都是true

但是注意 [1,2,3]  !=  {'0':1,'1':2,'2':3}, [1,2,3] != [1,2,3] 。因为对象之间的 == 与 ===是一样的。

那么要确切判断的话,经过我试验,可以使用以下规则:

 [].__proto__ === Array.prototype

{}.__proto__ === Object.prototype

 

附带2个对象深拷贝方法。工程里的copy1和我写的copy2.当然copy2 在规模大点的时候,效率比copy1要高。

function copy1(obj){
     var o;
    if (obj == null || obj == undefined || typeof obj != 'object'){
        o = obj;
    }
    else{
        var s = JSON.stringify(obj);
        o = JSON.parse(s);
    }
    return o;
}
function copy2(obj){
    var re;
    if(obj.__proto__ === Object.prototype ){
        re = {};
        for(var key in obj){
            re[key] = copy2(obj[key]);
        }
    }else if(obj.__proto__ === Array.prototype){
        re = Array(obj.length);
        for(var i = 0;i < re.length;i++){
            re[i] = obj[i];
        }
    
    }else{
        re = obj;
    }
    return re;
}

 

推荐阅读