Object.assign方法是浅拷贝还是深拷贝?
1,普通变量
let obj={name:"zhangsan",colors:["red", "green", "blue"]}; let obj2=Object.assign({},obj); obj2.name='wang'; console.log(obj2);//name wang colors:["red", "green", "blue"] console.log(obj);//name zhangsan colors:["red", "green", "blue"]
2,引用变量
let obj={name:"zhangsan",colors:["red", "green", "blue"]}; let obj2=Object.assign({},obj); obj2.colors[0]='orange'; console.log(obj2);//name zhangsan colors:["orange", "green", "blue"] console.log(obj);//name zhangsan colors:["orange", "green", "blue"]
所以Object.assign对于含有引用类型值的对象无法深拷贝。
3,如果参数是数组
普通数组
let colors=['red','green','blue']; let colors2=Object.assign([],colors); colors2[0]="orange"; console.log(colors2);//['orange','green','blue'] console.log(colors);//['red','green','blue']
含有引用类型的值的数组
let colors=['red','green','blue',['football','basketball','volleyball']]; let colors2=Object.assign([],colors); colors2[3][0]="ping-pang"; console.log(colors2);//['red','green','blue',['ping-pang','basketball','volleyball']] console.log(colors);//['red','green','blue',['ping-pang','basketball','volleyball']]
和上面一样,如果一维数组里面有引用类型的值,则无法深拷贝。
相关推荐
在JavaScript中,基本数据类型如undefined、null、boolean、number和string的赋值和传递都是值拷贝,即每个变量存储的都是值的复制,不存在所谓的深浅拷贝问题。然而,对于引用类型,例如对象、数组等,其赋值和传递...
例如,使用 `Object.assign()` 方法可以实现浅拷贝: ``` var obj = { a: {a: “kobe”, b: 39}, username: 'kobe'}; var initalObj = Object.assign({}, obj); initalObj.a.a = "wade"; InitalObj.username = '...
1. `JSON.parse(JSON.stringify())`:通过JSON序列化和反序列化实现深拷贝,但这种方法不适用于包含函数、循环引用或Date、RegExp等不能被JSON表示的对象。 2. 手写深拷贝函数:可以通过递归遍历对象的每个属性,...
2. **JSON.parse 和 JSON.stringify**:虽然这种方法简单,但有局限性,因为它不能处理函数和循环引用的场景。 3. **`Array.prototype.concat()`**:当需要拷贝的属性是数组时,`concat()`可以生成新数组,但对嵌套...
### 深浅拷贝 在处理对象和数组时,经常需要进行拷贝操作。浅拷贝仅复制对象或数组的引用,而深拷贝则创建一个新的对象或数组,包含原始数据的副本。 ```javascript let obj = { key: 'value' }; let ...
一些库如lodash提供了`_.cloneDeep()`函数来实现深拷贝,而ES6的`Object.assign()`和`Map`、`Set`的构造函数也可以帮助实现深拷贝,但都需要配合其他方法处理复杂情况。 8. **通用深拷贝函数**: 编写一个通用的...
在实际开发中,理解幻影副本和深浅拷贝的区别至关重要,因为错误的拷贝方式可能导致意外的数据更改,从而影响程序的正确性。正确地使用这些技术可以确保代码的健壮性和可维护性。在处理大型项目或复杂数据结构时,...
例如,使用扩展运算符(`...`)或`Object.assign()`方法进行的对象拷贝就是浅拷贝。 深拷贝则是创建一个全新的对象,不仅复制原始对象的所有属性,而且对嵌套的对象或数组也会进行递归拷贝,确保新对象与原始对象...
4. 深浅拷贝:理解Object.assign、JSON.parse(JSON.stringify())以及手动实现拷贝的方法和区别。 5. 错误处理:理解try...catch语句,学会自定义错误和异常处理。 三、Node.js后端开发: 1. Express框架:Express是...
7. **对象方法**:Object.keys(), Object.values(), Object.assign()等,以及对象的解构赋值和深浅拷贝。 8. **正则表达式**:理解正则的基本语法,用于字符串的匹配、查找、替换等操作。 9. **事件处理**:DOM...
5. 深浅拷贝:掌握Object.assign()、JSON.parse(JSON.stringify())、展开运算符(...)和自定义函数实现对象的浅拷贝和深拷贝。 三、JavaScript实际应用 1. DOM操作:理解DOM(文档对象模型),熟悉DOM节点的操作...