如何区分JavaScript中的深拷贝与浅拷贝?

2026-04-03 08:250阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1626个文字,预计阅读时间需要7分钟。

如何区分JavaScript中的深拷贝与浅拷贝?

目录 + 浅拷贝 + 深拷贝 + 补充 + 总结 + 拷贝(又称克隆,包括复制等)+ 但实际上是又分深拷贝和金拷贝。这个问题其实很简单,如果不想说可能会有些绕,但理解起来并不难。

目录
  • 浅拷贝
  • 深拷贝
  • 补充
  • 总结

拷贝(又名克隆,复制等),但是又分深拷贝和钱拷贝。

其实这个问题有时候想通了就很简单,如果想不通可能会有点绕,不过其难度比闭包等好理解的多。

为什么又这个概念的存在呢?先举一个例子。

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分钟。

如何区分JavaScript中的深拷贝与浅拷贝?

目录 + 浅拷贝 + 深拷贝 + 补充 + 总结 + 拷贝(又称克隆,包括复制等)+ 但实际上是又分深拷贝和金拷贝。这个问题其实很简单,如果不想说可能会有些绕,但理解起来并不难。

目录
  • 浅拷贝
  • 深拷贝
  • 补充
  • 总结

拷贝(又名克隆,复制等),但是又分深拷贝和钱拷贝。

其实这个问题有时候想通了就很简单,如果想不通可能会有点绕,不过其难度比闭包等好理解的多。

为什么又这个概念的存在呢?先举一个例子。

var person={ name:"张三", age:22 } var person1=person; console.log(person); console.log(person1);

似乎可以被拷贝下来了,但是如果你操作person1的属性值,这个时候person属性值也会改变。

person1.name="李四"; console.log(person); console.log(person1);

其实这个很容易理解,那就是上面只是两个对象的指针地址都是指向栈内存的相同位置,前面讲解引用数据类型的时候讲解过何为引用数据类型。

补充 :

对象.属性 和对象[属性]其实都是操作对象的属性值,只是两个不同的写法而已。

那说明这种指针赋值的方式不是拷贝,那什么就是拷贝呢,那就是一个新的对象用用了一个对象的所有属性,但彼此不受影响。

阅读全文