美文网首页
JS中的深浅拷贝

JS中的深浅拷贝

作者: ChasenGao | 来源:发表于2019-04-30 11:02 被阅读0次

这几乎是前端面试的高频问题。

什么是深浅拷贝?

浅拷贝
var a = {name:'steven'}
var b = a 
b.name = "bob"
console.log(a) // {name:'bob'}
console.log(b) // {name:'bob'}

把对象a的值赋值给b,再修改b.name的值, a.name的值跟着一起改变了,这就是浅拷贝。
非专业解释: 因为a 和 b的指针指向同一个内存空间,赋值只是对指针进行了拷贝,故为浅拷贝。

深拷贝

显而易见,深拷贝就是要修改b.name时, a.name的值不变。 说白了就是新开辟一块内存空间存储b。

第一种方法
目标对象只有一层如 {name:'steven'}

var a = {name:'steven'}
var b = JSON.parse(JSON.stringify(a))
// 先将其JSON序列化,再解析,得到深拷贝的a
b.name = 'bob'
console.log(a) // {name:'steven'}
console.log(b) // {name:'bob'}

不太建议使用。
缺点:深拷贝之后,不管这个对象原来的构造函数是什么,在深拷贝之后都会变成Object。同时如果对象中存在循环引用的情况也无法正确处理。 引用:https://blog.csdn.net/yangyixue123/article/details/79687859

第二种方法

var a = {name:'steven'}
var b = Object.assign({},a)
// 使用ES6的Object.assign方法
b.name = 'bob'
console.log(a) // {name:'steven'}
console.log(b) // {name:'bob'}

第三种方法,写一个递归方法

function deepCopy(obj) {
        var result = Array.isArray(obj) ? [] : {};
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                if (typeof obj[key] === 'object') {
                    result[key] = deepCopy(obj[key]);   //递归复制
                } else {
                    result[key] = obj[key];
                }
            }
        }
        return result;
    }

相关文章

  • js的深浅拷贝

    js的深浅拷贝可以分为数组的深浅拷贝和对象的深浅拷贝 一、数组的深浅拷贝如果只是简单的将数组中的元素付给另外一个数...

  • JS中的深浅拷贝

    这几乎是前端面试的高频问题。 什么是深浅拷贝? 浅拷贝 把对象a的值赋值给b,再修改b.name的值, a.nam...

  • JS文集的目录

    js基础心法 深浅拷贝(递归)深浅拷贝(首层浅拷贝) js 数据处理 数组对象查找的常见操作数组对象去重的常见操作...

  • js深浅拷贝

    项目中,一般会用loadsh库,地址:https://github.com/lodash/lodash 浅拷贝方法...

  • js 深浅拷贝

    浅拷贝 是 把对象或者数组的第一层 key 或者 索引 赋到 新的 对象或者对象上 深拷贝是迭代浅拷贝的操作,也就...

  • js 深浅拷贝

    深拷贝 更好的写法: 浅拷贝 浅拷贝,还可以用 Object.assign 、展开运算符 ...

  • JS深浅拷贝

  • JS深浅拷贝

    JS存储方式 JS中存在基本数据类型和引用数据类型1.基本数据类型:number,string,boolean,n...

  • JS深浅拷贝

    浅拷贝 浅拷贝的意思就是只复制引用,而未复制真正的值。 深拷贝 深拷贝就是对目标的完全拷贝,不像浅拷贝那样只是复制...

  • JS 深浅拷贝

    START 番茄我又又又来写点啥啦。 最近敲代码,总是遇到需要修改数据,在前端展示。但是最后并不想修改原数据的情况...

网友评论

      本文标题:JS中的深浅拷贝

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