一、关于Object.assgin()基本知识
概念
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
理解
对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的。可枚举性决定了这个属性能否被for…in查找遍历到。由此推导出原始数据不可枚举,可枚举的只有引用类型数据
 

语法

//target:目标对象 sources:源对象
Object.assign(target, ...sources)

参数

target:目标对象

sources:源对象

描述

1)、 如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。

2)、 该方法使用源对象的[[Get]]和目标对象的[[Set]],所以它会调用相关 getter 和 setter。

3)、它分配属性,而不仅仅是复制或定义新的属性。如果合并源包含getter,这可能使其不适合将新属性合并到原型中。为了将属性定义(包括其可枚举性)复制到原型,应使用Object.getOwnPropertyDescriptor()Object.defineProperty() 。

4)、String类型和 Symbol 类型的属性都会被拷贝。

5)、在出现错误的情况下,拷贝会被打断

用法

1)  复制一个对象

2)  合并对象

结论:目标对象o1也会变化

3)  合并具有相同属性的对象

结论:目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖

4)  继承属性和不可枚举属性是无法拷贝

5)  原始类型会包装为对象

结论:1)原始类型会被包装,null 和 undefined 会被忽略。

2)只有字符串的包装对象才可能有自身可枚举属性。

6)  拷贝Symbol类型的属性

7) 异常,拷贝会被打断

二、关于Object.assgin()引出是深拷贝还是浅拷贝的问题:

有人说是深拷贝,有人说是浅拷贝,也不见的谁错或对(某些特定情况下)

浅拷贝:仅仅是复制了引用,彼此之间的操作会互相影响,一个改变,另一个也改变

深拷贝:创建新的内存地址保存值,彼此之间相互独立,互不影响

了解深浅拷贝的前提是了解原始值和引用值,可查看《js基础-值类型和引用类型》

深拷贝的时候:

结论:改变了复制对象(copyobj)的name .源对象(obj)的name没有变化,为深拷贝

浅拷贝的时候:

结论:复制对象(copyobj1)改变了属性值name,源对象(obj1)的属性值name没有改变。但是复制对象copyobj1改变了grade属性值后,源对象(obj1)的grade也改变了。

综合结论:Object.assgin()拷贝的是属性值。假如源对象的属性值是一个对象,它也只拷贝那个引用值。 

若源对象中只有一级属性,此方法为深拷贝。

若源对象有二级属性【如对象中有对象的时候,数组中还有数组的时候】,此方法是浅拷贝。

 

最新文章

  1. sizzle分析记录:关于querySelectorAll兼容问题
  2. 通过WMI接口监控服务器性能
  3. Python Beautiful Soup模块的安装
  4. Spark核心概念之RDD
  5. Word2010编号列表&多级列表
  6. prefuse学习(一)用非数据库连接和xml的方式读入数据
  7. 64位Win7安装+32位Oracle + PL/SQL 解决方法
  8. CultureInfo中重要的InvariantCulture
  9. (简单) POJ 3264 Balanced Lineup,RMQ。
  10. HDU - 1172
  11. 在github上最热门好评高的ROS相关功能包
  12. 第一课:Hadoop集群环境搭建
  13. [Swift]LeetCode394. 字符串解码 | Decode String
  14. JS的javascript:void(0)用法
  15. k8s之Hello World(四)
  16. supervisord.conf
  17. JSP 基础(二)
  18. 简单三招,设计复杂ERP报表
  19. bzoj千题计划265:bzoj4873: [六省联考2017]寿司餐厅
  20. “找女神要QQ号码”——java篇

热门文章

  1. 新项目决定用 JDK 17了
  2. freeswitch的gateway配置方案
  3. .NET周报【12月第3期 2022-12-23】
  4. python之路38 SQL注入问题 索引触发器 事务 存储过程 函数 流程控制
  5. vertica 7.0 使用kafka
  6. 从0到1手把手实现vite
  7. Unity_UIWidgets - 组件Scaffold
  8. 【随笔记】Tina 系统的 ADB、声卡、网卡、串口多路共存
  9. 【随笔记】NDK 编译开源库 SQLite3
  10. 走进Linux