判断类型的方法
//类型判断的方法
function typeOf(obj) {
let type = Object.prototype.toString.call(obj)
let reg = /\[object\s+(\w+)\]/
return type.match(reg)[1].toLocaleLowerCase()
}
参考ivew源码
function deepCopy(data) {
const t = typeOf(data);
let o;
if (t === 'array') {
o = [];
} else if ( t === 'object') {
o = {};
} else {
return data;
}
if (t === 'array') {
for (let i = 0; i < data.length; i++) {
o.push(deepCopy(data[i]));
}
} else if ( t === 'object') {
for (let i in data) {
o[i] = deepCopy(data[i]);
}
}
return o;
}
另一种写法
function deep(dest, obj){
var o = dest;
for (var key in obj) {
if (typeof obj[key] === 'object'){ //判断是不是对象
o[key] = (obj[key].constructor===Array)?[]:{}; //constructor判断是不是数组
deep(o[key], obj[key])
} else {
o[key] = obj[key]
}
}
return o;
}
2.简单的也可以用对象或数组的合并方法
assign()
3.序列化
JSON.stringyf()
缺点:不支持function,undefined,和nan