美文网首页
解构赋值与深浅拷贝

解构赋值与深浅拷贝

作者: 郝同学1208 | 来源:发表于2021-11-17 15:08 被阅读0次

文章序

开发中遇到了一个问题,正好没有深入去研究解构赋值和深浅拷贝,借此机会学习一波,整理如下

函数的形参写法有些不懂,简化代码如下:

function myFunction({
        school = [],
        grade = [],
        class = [],
        name = "hpf",
        age = null
      } = {
        school : [],
        grade : [],
        class : [],
        name : "hpf",
        age : null
      }) {
    school.map(() => {
      // do something
    })
}

看起来就很魔幻,第一次见这么写形参的,但是魔幻归魔幻,咱还得继续分析不是,第一眼看到就想到了解构赋值,但是为什么这里要解构赋值,不清楚,直到我继续往下看,在函数体内发现了.map循环,并且在循环里还改变了变量值,然后我就突然明白了,这是用解构赋值实现深拷贝啊!遂写了个demo测试一下,代码如下:

<script>
let obj1 = {
    name: 'zs',
    age: 20,
    city: 'New York'
};
let obj2 = {
    name: 'zs',
    age: 20,
    city: 'New York'
};
function fun1 (
    {
        name = '',
        age = null,
        city = ''
    } = {
        name: '',
        age: null,
        city: ''
    }
) {
    console.log(name, age, city);                           // zs 20 New York
    name = 'ls',
    age = 30,
    city = 'London'
    console.log(name, age, city);                           // ls 30 London
    console.log(obj1.name, obj1.age, obj1.city);            // zs 20 New York
};
function fun2 (obj) {
    let copyObj = obj;
    console.log(obj.name, obj.age, obj.city);               // zs 20 New York
    copyObj.name = 'ls',
    copyObj.age = 30,
    copyObj.city = 'London'
    console.log(copyObj.name, copyObj.age, copyObj.city);   // ls 30 London
    console.log(obj.name, obj.age, obj.city);               // ls 30 London
};
fun1(obj1);
fun2(obj2);
</script>

可以看出来,不出所料,果然是为了实现深拷贝,以前提到深拷贝,要么就是数组通过循环遍历然后另起一个变量进行复制,要么就是用JSON.prase(JSON.stringify(obj))通过JSON转换,这次又学到了新的方法

相关文章

  • 解构赋值与深浅拷贝

    文章序 开发中遇到了一个问题,正好没有深入去研究解构赋值和深浅拷贝,借此机会学习一波,整理如下 函数的形参写法有些...

  • JavaScript 深拷贝、浅拷贝和 Object.assig

    数组解构赋值的模式同样适用于任意迭代器:ES6 变量声明与赋值:值传递、浅拷贝与深拷贝详解 浅拷贝 浅拷贝是指复制...

  • 属性值为对象时

    若一个对象的属性值为对象,则该属性的属性值引用了一个对象。 x是解构赋值的对象,解构赋值为浅拷贝,拷贝形成的对象与...

  • 引用赋值与深浅拷贝

    1.引用赋值 是地址的赋值,将对象指针赋值给一个变量,让此变量指向对象。 2.浅拷贝 只会将对象的各个属性进行依次...

  • 简介深浅拷贝

    深浅拷贝 python 直接赋值,浅拷贝和深拷贝 直接赋值 其实就是对象的引用 (可以理解成浅拷贝) 浅拷贝: 拷...

  • 深拷贝&浅拷贝

    浅拷贝:Object.assign({},obj);解构赋值(...) 深拷贝:递归遍历JSON.parse() ...

  • 什么是深拷贝什么是浅拷贝,分别在什么时候用

    根据拷贝内容的不同,分为深浅拷贝 深拷贝:指针赋值,且内容拷贝 浅拷贝:只是简单的指针赋值 苹果为什么这么设计呢?...

  • OC中深拷贝与浅拷贝的区别

    根据拷贝内容的不同,分为深浅拷贝 深拷贝:指针赋值,且内容拷贝 浅拷贝:只是简单的指针赋值 苹果为什么这么设计呢?...

  • 解构赋值

    解构赋值 数组的解构赋值 嵌套,默认值,展开符 对象的解构赋值 对象解构赋值的本质与简写 对象解构的模式与变量 对...

  • Python中的赋值及深浅拷贝

    Python中的赋值及深浅拷贝 赋值 示例 打印 浅拷贝 示例 打印 深拷贝 示例 打印 三层列表演示 示例 打印

网友评论

      本文标题:解构赋值与深浅拷贝

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