【ECMAScript 5_6_7】16、ES6——深度克隆知识点及其扩展

1、数据类型

* 数据分为基本的数据类型(String, Number, boolean, Null, Undefined)和对象数据类型

 - 基本数据类型:
   特点: 存储的是该对象的实际数据(拷贝后会生成一份新的数据,修改拷贝以后的数据不会影响原数据)
 - 对象/数组数据类型:
   特点: 存储的是该对象在栈中引用,真实的数据存放在堆内存里(拷贝后不会生成新的数据,而是拷贝引用,修改拷贝以后的数据会影响原数据)

2、关于数据的复制

- 基本数据类型
   存放的就是实际的数据,可直接复制,虽然互不受影响,但这也算不上深拷贝,因为深拷贝本身只针对较为复杂的object类型数据。
let a = 1;
let b = a;


     直接复制
- 引用数据类型
  克隆数据:对象/数组
   1、区别: 浅拷贝/深度拷贝
     判断: 拷贝是否产生了新的数据还是拷贝的是数据的引用


                   浅拷贝

                   深度拷贝
     知识点:对象数据存放的是对象在栈内存的引用,直接复制的是对象的引用
       let obj = {username: 'kobe'}
       let obj1 = obj; // obj1 复制了obj在栈内存的引用
    2、常用的拷贝数据的方法(只针对object类型数据)
     1). 直接赋值给一个变量: 浅拷贝
     2). Object.assign: 浅拷贝
     3). Array.prototype.concat(): 浅拷贝
     4). Array.prototype.slice(): 浅拷贝
     5). JSON.parse(JSON.stringify(arr/obj)): 深拷贝(深度克隆) 但不能处理函数数据(转换为null)




  
  对象的深度克隆





 

你可能感兴趣的:(ECMAScript,高级)