引言
深拷贝浅拷贝是一道经典的面试题,在实际编程中也有着不可忽视的作用,本文将帮助你从0理解浅拷贝深拷贝的本质以及实现
五种数据类型
1.基本数据类型:数字,字符串
2.数组
复制引用
const a[]=[2,4,6]
const b[]=a[] //b数组为a数组的引用对象,每当a改变数值,b将随之改变
浅拷贝
const a[]=[2,4,6]
const b[]=...a
这里用了ES6的语法糖...拓展运算符把a数组复制了一边,此时b数组是全新复制一个数组对象,当改变a数组d的值时,b数组不会随之改变。到这里有同学问,深拷贝就这?当然不是了,现在目标数组只有一层,如果遇到嵌套数组呢?
const a[]=[2,[2,3,4]]
深拷贝
要实现深拷贝就要用到递归的思想了,把数组一层一层地复制下去,否则只有第一层是全新的对象,第二层就会是目标数组的对象引用,关于递归的思想我们会在后面说
复制代码
3.json
4.系统变量
系统变量:
以 Date 为例子 js中有一种封装好的方法可以复制系统对象:把自定义的系统对象名字赋值给同类型系统对象
const Date01=new Date
const Date02=(Date01)
复制代码
5.自定义对象
6.symbol
ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。
复制代码
Symbol.for()
Symbol.for() 类似单例模式,首先会在全局搜索被登记的 Symbol 中是否有该字符串参数作为名称的 Symbol 值,如果有即返回该 Symbol 值,若没有则新建并返回一个以该字符串参数为名称的 Symbol 值,并登记在全局环境中供搜索。
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END