把一个变量的值赋值给另一个变量,如果是引用类型,那么有两种方式 浅拷贝与深拷贝
浅拷贝 引用给newObj 即拷贝指针 即引用传递 本身会改变
深拷贝,创建一个新对象,内容给原来需要拷贝的对象的内容是一样的。 类似值传递(值传递是指基本数据类型) 本身不会改变
深拷贝的三种方式
第一种,利用map返回新数组的机制 return userlist.map(item=>item);
第二种,利用Array.from返回新数组的机制 return Array.from(userlist);
第三种,利用 ...解开数组.自己在套上一个新的数组 return [...userlist];
deepClone: obj => {
var _obj
if (typeof obj === 'object' && obj !== null) {
if (Object.prototype.toString.call(obj) === '[object Object]') {
_obj = {}
for (var key in obj) {
_obj[key] = utils.deepClone(obj[key])
}
return _obj
} else if (Object.prototype.toString.call(obj) === '[object Array]') {
_obj = []
for (var _key in obj) {
_obj[_key] = utils.deepClone(obj[_key])
}
return _obj
}
} else {
return obj
}
},
数据
JSON.parse(JSON.stringify())
数组
filter
find
Array.prototype.forEach
对象
Object.assign({}, this.$route.query, { tabName: data.name })
.除了上面两种方法之外,我们还可以借用JQ的extend方法。
$.extend( [deep ], target, object1 [, objectN ] )