如何区分JavaScript中的深拷贝与浅拷贝?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1626个文字,预计阅读时间需要7分钟。
目录 + 浅拷贝 + 深拷贝 + 补充 + 总结 + 拷贝(又称克隆,包括复制等)+ 但实际上是又分深拷贝和金拷贝。这个问题其实很简单,如果不想说可能会有些绕,但理解起来并不难。
目录
- 浅拷贝
- 深拷贝
- 补充
- 总结
拷贝(又名克隆,复制等),但是又分深拷贝和钱拷贝。
其实这个问题有时候想通了就很简单,如果想不通可能会有点绕,不过其难度比闭包等好理解的多。
为什么又这个概念的存在呢?先举一个例子。
var person={ name:"张三", age:22 } var person1=person; console.log(person); console.log(person1);
似乎可以被拷贝下来了,但是如果你操作person1的属性值,这个时候person属性值也会改变。
person1.name="李四"; console.log(person); console.log(person1);
其实这个很容易理解,那就是上面只是两个对象的指针地址都是指向栈内存的相同位置,前面讲解引用数据类型的时候讲解过何为引用数据类型。
补充 :
对象.属性 和对象[属性]其实都是操作对象的属性值,只是两个不同的写法而已。
那说明这种指针赋值的方式不是拷贝,那什么就是拷贝呢,那就是一个新的对象用用了一个对象的所有属性,但彼此不受影响。
本文共计1626个文字,预计阅读时间需要7分钟。
目录 + 浅拷贝 + 深拷贝 + 补充 + 总结 + 拷贝(又称克隆,包括复制等)+ 但实际上是又分深拷贝和金拷贝。这个问题其实很简单,如果不想说可能会有些绕,但理解起来并不难。
目录
- 浅拷贝
- 深拷贝
- 补充
- 总结
拷贝(又名克隆,复制等),但是又分深拷贝和钱拷贝。
其实这个问题有时候想通了就很简单,如果想不通可能会有点绕,不过其难度比闭包等好理解的多。
为什么又这个概念的存在呢?先举一个例子。
var person={ name:"张三", age:22 } var person1=person; console.log(person); console.log(person1);
似乎可以被拷贝下来了,但是如果你操作person1的属性值,这个时候person属性值也会改变。
person1.name="李四"; console.log(person); console.log(person1);
其实这个很容易理解,那就是上面只是两个对象的指针地址都是指向栈内存的相同位置,前面讲解引用数据类型的时候讲解过何为引用数据类型。
补充 :
对象.属性 和对象[属性]其实都是操作对象的属性值,只是两个不同的写法而已。
那说明这种指针赋值的方式不是拷贝,那什么就是拷贝呢,那就是一个新的对象用用了一个对象的所有属性,但彼此不受影响。

