`
yuyongkun4519
  • 浏览: 44636 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ES6 能否使用Object.assign实现深浅拷贝

 
阅读更多

 

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对象拷贝与Object.assign用法实例分析

    在JavaScript中,基本数据类型如undefined、null、boolean、number和string的赋值和传递都是值拷贝,即每个变量存储的都是值的复制,不存在所谓的深浅拷贝问题。然而,对于引用类型,例如对象、数组等,其赋值和传递...

    1.深浅拷贝.pptx

    例如,使用 `Object.assign()` 方法可以实现浅拷贝: ``` var obj = { a: {a: “kobe”, b: 39}, username: 'kobe'}; var initalObj = Object.assign({}, obj); initalObj.a.a = "wade"; InitalObj.username = '...

    【JavaScript源代码】详解JS变量存储深拷贝和浅拷贝.docx

    1. `JSON.parse(JSON.stringify())`:通过JSON序列化和反序列化实现深拷贝,但这种方法不适用于包含函数、循环引用或Date、RegExp等不能被JSON表示的对象。 2. 手写深拷贝函数:可以通过递归遍历对象的每个属性,...

    详解js中的对象的深浅拷贝

    2. **JSON.parse 和 JSON.stringify**:虽然这种方法简单,但有局限性,因为它不能处理函数和循环引用的场景。 3. **`Array.prototype.concat()`**:当需要拷贝的属性是数组时,`concat()`可以生成新数组,但对嵌套...

    JavaScript对象与数组参考大全

    ### 深浅拷贝 在处理对象和数组时,经常需要进行拷贝操作。浅拷贝仅复制对象或数组的引用,而深拷贝则创建一个新的对象或数组,包含原始数据的副本。 ```javascript let obj = { key: 'value' }; let ...

    JavaScript实现浅拷贝与深拷贝的方法分析

    一些库如lodash提供了`_.cloneDeep()`函数来实现深拷贝,而ES6的`Object.assign()`和`Map`、`Set`的构造函数也可以帮助实现深拷贝,但都需要配合其他方法处理复杂情况。 8. **通用深拷贝函数**: 编写一个通用的...

    幻影副本

    在实际开发中,理解幻影副本和深浅拷贝的区别至关重要,因为错误的拷贝方式可能导致意外的数据更改,从而影响程序的正确性。正确地使用这些技术可以确保代码的健壮性和可维护性。在处理大型项目或复杂数据结构时,...

    浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题

    例如,使用扩展运算符(`...`)或`Object.assign()`方法进行的对象拷贝就是浅拷贝。 深拷贝则是创建一个全新的对象,不仅复制原始对象的所有属性,而且对嵌套的对象或数组也会进行递归拷贝,确保新对象与原始对象...

    lanius-assessment:后端开发面试评估

    4. 深浅拷贝:理解Object.assign、JSON.parse(JSON.stringify())以及手动实现拷贝的方法和区别。 5. 错误处理:理解try...catch语句,学会自定义错误和异常处理。 三、Node.js后端开发: 1. Express框架:Express是...

    codewars:一些有趣的 Katas

    7. **对象方法**:Object.keys(), Object.values(), Object.assign()等,以及对象的解构赋值和深浅拷贝。 8. **正则表达式**:理解正则的基本语法,用于字符串的匹配、查找、替换等操作。 9. **事件处理**:DOM...

    weijinsuo:面试作业

    5. 深浅拷贝:掌握Object.assign()、JSON.parse(JSON.stringify())、展开运算符(...)和自定义函数实现对象的浅拷贝和深拷贝。 三、JavaScript实际应用 1. DOM操作:理解DOM(文档对象模型),熟悉DOM节点的操作...

Global site tag (gtag.js) - Google Analytics