一般我們使用typeof obj === "object"检测”obj”是否为对象
但是這種檢測有一定的缺點, 用 typeof 是否能准确判断一个对象变量,答案是否定的,null 的结果也是 object,Array 的结果也是 object,有时候我们需要的是 "纯粹" 的 object 对象。如何避免呢?
其實比較好的方式就是
Object.prototype.toString.call(obj) === "[object Object]
這裏我們寫一個對象深拷貝的方法:
function deepCopy ( p, c ) {
//还需要判断c是否为空对象或空数组,其他类型抛出错误
let obj = c||{};
if (p) {
for (let i in p) {
if (typeof(p[i]) === 'object'&&Object.prototype.toString.call(p[i])!=="[object Null]") {
obj[i] = (p[i].constructor === Array ? [] : {});
deepCopy( p[i], obj[i] );
} else {
obj[i] = p[i];
}
}
return obj;
}
return '';
}
楼主是一个前端入职半年多的新人,请大家多多关照,多多指点。谢谢