ES6:区分解构与扩展运算符

本文详细介绍了JavaScript中的扩展运算符(...)和解构赋值的概念及用法。扩展运算符用于复制对象或数组,而解构赋值则用于方便地获取对象的属性值。两者结合能实现单层深拷贝,适用于灵活地按需取值。此外,还探讨了它们在数组和对象深拷贝、函数传参等方面的应用。

这两者结合可以实现单层深拷贝,导致之前混淆了,今天发现不是一回事,记录下:

总结:

  • …扩展运算符是自动遍历取值,可实现一层深拷贝,因为其原理就是遍历赋值
let bar = { a: 1, b: 2 };let baz = { ...bar }; // 等价let baz= { a: 1, b: 2 }
  • 解构是取出指定元素/属性,取代 obj.name这种传统写法,多用于传参、嵌套解构赋值等
let bar = { a: 1, b: 2 };let {a,b}= bar; // a: 1, b: 2
  • 两者结合,即自动遍历一层再解构赋值,可实现灵活的深拷贝(还是单层,只循环赋值了一次)
let bar = { a: 1, b: 2 };let {a}= {...bar}; // 右边遍历,左边按需解构赋值

扩展运算符(遍历一层深拷贝)+解构赋值(按需取值)=灵活的按需取值深拷贝;
在这里插入图片描述

扩展运算符

  • 用于取出参数对象中的所有可遍历属性
let bar = { a: 1, b: 2 };
let baz = { ...bar }; // 等价let baz= { a: 1, b: 2 };
//等价于let baz = Object.assign({}, bar);
  • 可用于数组深拷贝:
var arr2 = arr;
var arr3 = [...arr];
console.log(arr===arr2); //true, 说明arr和arr2指向同一个数组
console.log(arr===arr3); //false, 说明arr3和arr指向不同数组
  • 可用于对象深拷贝:
let arr = { a: 1, b: 2 }; var arr2 = arr;
var arr3 = {...arr};
console.log(arr===arr2); //true, 说明arr和arr2指向同一个数组
console.log(arr===arr3); //false, 说明arr3和arr指向不同数组

解构

** let {xx} = obj;**

  • 解构的作用是可以快速取得数组或对象当中的元素或属性,而无需使用arr[x]或者obj[key]等传统方式进行赋值
let bar = { a: 1, b: 2 };
let {a,b}= bar ; // a: 1, b: 2 
  • 可用于函数传参
var arr = {name:'zzc',age:16,sex:'man'};

function fn1({name, age, sex}) {
    console.log(name);
    console.log(age);
    console.log(sex);
}
fn1(arr);
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跳动的世界线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值