前言
今天看深浅拷贝的时候,注意到了一个方法Object.assign();去MDN查了一下,发现第一个参数是最终的结果对象,后面的多个参数依次加入到第一个对象中,并且得到结果的过程是一个浅拷贝的过程,这也就意味着如果其中有引用类型或者对象(因为对象浅拷贝的时候也只是复制了其在栈中的指针),那么对其修改的话会对其原有的对象产生影响。(浅拷贝的影响只是针对于其中的元素,并不会对结果的引用类型有什么影响,比如Object.assign([],[1,2,3,3]))这样得到的新的数组,对其进行修改并不会影响到原有的数组内容,如下图
顺带一提,Array.prototype.slice()也是一个浅拷贝的过程。
进入正题
var a = [1,2,3,[2,3,4,5],123,2];
var b = Object.assign([], a);
console.log('-----',a,b);
b[3].push('123');
console.log('=========',a,b)
复制代码
按道理来讲这一段的第一个输出应该是原来的a,b ==> [1,2,3,[2,3,4,5],123,2]
然后第二次的时候输出变成 a,b ==> [1,2,3,[2,3,4,5, “123”],123,2]
但结果是
后来经过查询得知,当在浏览器打开那个三角的时候,会重新去内存中取值,所以这个时候取得值就是及进行修改之后的值了。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END