js 判断确切判断Array和Object
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; }