Javascript知识点:浅拷贝和深拷贝

前言

本文来分析javascript开发中经常会遇到的浅拷贝和深拷贝以及总结网上各种实现方式,希望对大家有所帮助。

什么是浅拷贝和深拷贝?

先聊一下Javascript的数据类型有哪些?
值类型:数字型(Number)、字符类型(String)、布尔类型(Boolean)、Null、undefined、Symbol
引用类型:对象类型(Object)、数组类型(Array)、函数类型(function)、正则类型(Regex)、日期类型(Date)

定义:
浅拷贝:浅拷贝其实是只复制了值类型 引用类型也能复制过去 不过复制的是引用类型的指针地址 如果后面对其修改双方都会产生影响,而不是真正拷贝,因此存在父对象被篡改的可能。

深拷贝:深拷贝就是不但复制了值类型也复制了引用类型 不过引用类型的指针地址都是独立存在的 相互修改不影响

了解了深拷贝和浅拷贝的定义,接下来我们来讲讲如何实现?

实现浅拷贝方式

1、[...],{...}
2、[].slice()和[].splice(0),Object.assign({},a)
3、Array.from()

实现深拷贝方式

1、JSON.parse(JSON.stringify()) 缺点:不能复制undefined和function类型
2、递归方法(遍历),缺点:不能解决循环引用问题
3、jquery的$.extend()方法
4、npm lodash包中的cloneDeep()方法(推荐)

总结

1、要理解什么是浅拷贝和深拷贝以及区别,再在理解的基本上再去找解决方案和实现方法。

引用

js对象浅拷贝和深拷贝详解
how-do-i-deep-clone-an-object-in-react
lodash cloneDeep

你可能感兴趣的:(javascript)