美文网首页
对象的浅拷贝

对象的浅拷贝

作者: 默成S | 来源:发表于2018-01-04 22:08 被阅读0次
var obj = {
  count: 1
}

function output(obj) {
  obj.count = obj.count + 1;
  console.log(obj.count);
}

在上面代码之后,执行下面代码分别输出什么?

output(obj);
console.log(obj.count);

1、假如两个值不一样,为什么?
2、假如两个值一样,为什么?有没有办法保证output函数内的obj.cout的改变不影响外面的obj.count?


执行的结果是一样的,因为在使用对象作为函数参数时,实际上传送给函数的是对象的地址,即函数体内的对象和作为参数的原对象实际上是同一个。所以,想要不影响外面的obj,就需要在函数体内定义一个局部的obj对象,并复制外部obj的值。
本例可实现如下

var obj = {
count: 1
}

function output(obj) {
var obj = JSON.parse(JSON.stringify(obj));
obj.count = obj.count + 1;
console.log(obj.count);
}

反思:
对象赋值并不是复制,而是引用、映射。output函数的形参对象变量其实就是实参变量的引用,所有他们是同一个。
在output函数内为了不影响真正的obj实体,有两种方式。

function output(obj) {
  obj = Object.assign({}, obj);
  obj.count = obj.count + 1;
  console.log(obj.count);
}

function output(obj) {
  obj = JSON.parse(JSON.stringify(obj));
  obj.count = obj.count + 1;
  console.log(obj.count);
}

以上两种方式都是对形参obj对象重新“复制”一份新的对象.

js中的浅拷贝和深拷贝:https://segmentfault.com/a/1190000008637489

相关文章

  • java 对象的拷贝

    拷贝:即复制 对象拷贝:即对象复制 java 对象拷贝分类:浅拷贝、深拷贝 java 对象的浅拷贝和深拷贝针对包含...

  • 2018-10-10函数基础

    深拷贝和浅拷贝 深拷贝 copy.deepcopy(对象)浅拷贝 copy.copy(对象)深拷贝: 将对象对应的...

  • iOS 深拷贝,浅拷贝

    深拷贝与浅拷贝 浅拷贝:浅拷贝并不拷贝对象本身,只是对指向对象的指针进行拷贝,并没有进行真正的复制,而是复制的对象...

  • 深浅拷贝,面向对象,Symbol,Set,Map

    一:浅拷贝与深拷贝对象的浅拷贝:浅拷贝是对象共用的一个内存地址,对象的变化相互影响。对象的深拷贝:简单理解深拷贝是...

  • 前端笔记(二) 对象的深浅拷贝,函数的防抖与节流,函数柯里化 ,

    对象的深浅拷贝 对象的深拷贝与浅拷贝的区别: 浅拷贝:仅仅复制对象的引用, 而不是对象本身。 深拷贝:把复制的对象...

  • JavaScript深拷贝、浅拷贝

    JavaScript深拷贝、浅拷贝 浅拷贝:浅拷贝只是复制了内存地址,如果原地址中的对象改变了,浅拷贝出来的对象也...

  • 2018-10-10day9函数基础

    1.浅拷贝、深拷贝 copy.copy(对象):浅拷贝copy.deepcopy(对象):深拷贝""" """拷贝...

  • Cloneable 接口

    浅拷贝(shallow clone)和深拷贝(deep clone) 浅拷贝是指拷贝对象时仅仅拷贝对象本身和对象中...

  • python基础笔记

    浅拷贝与深拷贝 copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。 copy.deepcopy...

  • 深拷贝和浅拷贝不同

    浅拷贝:指针(地址)拷贝,不会产生新对象深拷贝:内容拷贝,会产生新对象 非容器类对象的深拷贝、浅拷贝 非容器类对象...

网友评论

      本文标题:对象的浅拷贝

      本文链接:https://www.haomeiwen.com/subject/akpdnxtx.html