一.浅拷贝
浅拷贝指的是创建新的数据,这个数据有着原始数据属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值。如果属性是引用类型,拷贝的就是内存地址。
在js中,浅拷贝的方法有以下几种:
Object.assign
var obj={
age:18,
names:{
name1:'lixi',
name2:'xixi'
},
hobby:['sing','shopping']
}
var newObj = Object.assign({},fxObj)
复制代码
slice()
const fxArr = ['One','Two','Three']
const fxArrs = fxArr.slice(0)
fxArrs[1] = 'love'
console.log(fxArr) // ['One','Two','Three']
console.log(fxArrs) //['One','love','Three']
复制代码
concat()
const fxArr = ['One','Two','Three']
const fxArrs = fxArr.concat()
fxArrs[1] = 'love';
console.log(fxArr) // ['One', 'Two', 'Three']
console.log(fxArrs) // ['One', 'love', 'Three']
复制代码
拓展运算符
const fxArr = ["One", "Two", "Three"]
const fxArrs = [...fxArr]
fxArrs[1] = "love";
console.log(fxArr) // ["One", "Two", "Three"]
console.log(fxArrs) // ["One", "love", "Three"]
复制代码
二、深拷贝
深拷贝开辟一个新的栈,两个对象属性完全相同,但是对应不同的地址,修改一个对象的属性,另一个对象的属性不会变。
常见的深拷贝的方法有以下几种:
_.cloneDeep()
const _ = require('lodash');
const obj1 = {
a: 1,
b: { f: { g: 1 } },
c: [1, 2, 3]
};
const obj2 = _.cloneDeep(obj1);
console.log(obj1.b.f === obj2.b.f);// false
复制代码
jQuery.extend()
const $ = require('lodash');
const obj1 = {
a: 1,
b: { f: { g: 1 } },
c: [1, 2, 3]
};
const obj2 =$.extend(true, {}, obj1);
console.log(obj1.b.f === obj2.b.f);// false
复制代码
JSON.stringify()
const obj2=JSON.parse(JSON.stringify(obj1));
复制代码
- 但是这种方法,会忽略undefined、symbol和函数
const obj = {
name: 'A',
name1: undefined,
name3: function() {},
name4: Symbol('A')
}
const obj2 = JSON.parse(JSON.stringify(obj));
console.log(obj2); // {name: "A"}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END