【js - 任务4】
小课堂 上海
深拷贝浅拷贝
分享人:王旭东
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.参考文献
1.背景介绍
如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。
简单介绍一下 可以实现一维深拷贝的 方法 有两种jq 的方法 看图
除了上面两种方法之外,我们还可以借用JQ的extend方法。
$.extend( [deep ], target, object1 [, objectN ] )
deep表示是否深拷贝,为true为深拷贝,为false,则为浅拷贝
target Object类型 目标对象,其他对象的成员属性将被附加到该对象上。
object1 objectN可选。 Object类型 第一个以及第N个被合并的对象。
众所周知:js有深拷贝和浅拷贝的区别。之前写js深拷贝的时候一直用var copyObj = JSON.parse(JSON.stringify(obj));
但是后来发现JSON.stringify() 有以下几个特点:
非数组对象的属性不能保证以特定的顺序出现在序列化后的字符串中。
布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值。
undefined、任意的函数以及 symbol 值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)
或者被转换成 null(出现在数组中时)。
所有以 symbol 为属性键的属性都会被完全忽略掉,即便 replacer 参数中强制指定包含了它们。
不可枚举的属性会被忽略