前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES6新增语法 对象解构

ES6新增语法 对象解构

作者头像
心安事随
发布2024-07-29 16:38:00
890
发布2024-07-29 16:38:00
举报
文章被收录于专栏:前端大合集

介绍

ECMAScript6新增了对象解构语法,可以在一条语句中使用嵌套数据实现一个或者多个赋值操作, 简单的说,对象解构就是使用了与对象匹配的解构来实现对象属性赋值

简单使用

下面是不使用对象解构写的代码

代码语言:javascript
复制
let person = {name:"张三",age:21}
let personName = person.name
let personAge = person.age
console.log(personName) // 张三
console.log(personAge) // 21

再用对象解构的语法来实现一下

代码语言:javascript
复制
let person = {name:"张三",age:21}
let {name:PersonName,age:PersonAge} = person
console.log(PersonName,PersonAge) // 张三,21

两者实现的功能一样,但明显对象解构的方式更加方便,简洁

1. 解构源对象不存在的属性,会打印成来undefined

代码语言:javascript
复制
let person = {name:"张三",age:21}
let {name:PersonName,job:PersonAge} = person
console.log(PersonName,PersonAge) // undefined

2. 在解构赋值的同时可以定义默认值,这就有效解决了前面的源对象未定义该 属性的问题

代码语言:javascript
复制
let person = {name:"张三",age:21}
let {name:PersonName,job="WebKaiFa"} = person
console.log(PersonName,job) // 张三 WebKaiFa

3. 解构并不要求变量必须在结构表达式中声明,不过,如果给事先声明的 变量 赋值,则赋值表达式必须包含在一对括号当中

如果不加括号的的情况(报错)

代码语言:javascript
复制
let personName,personAge;
let person = {name:"张三",age:21};
{name:personName,age:personAge} = person;
console.log(personName,personAge);
//  Uncaught SyntaxError: Unexpected token ':'

加了括号(正常输出)

代码语言:javascript
复制
let personName,personAge;
let person = {name:"张三",age:21};
({name:personName,age:personAge} = person)
console.log(personName,personAge); // 张三 21

4. 嵌套解构

代码语言:javascript
复制
let person = {name:"张三",age:21,job:{
    name:"WebKaiFa"
}};
let personCopy = {};
// 解构源对象 赋值给personCopy空对象
({name:personCopy.name,age:personCopy.age,job:personCopy.job} = person)
console.log(personCopy);

因为一个对象的引用被赋值给personCopy空对象,所以修改源对象的属性值,personCopy的值也会对应的发生改变,

5.在外层属性没有定义的情况不能使用嵌套解构,无论源对象还有目标对象都是 一样的

显示undefined

代码语言:javascript
复制
let person = {name:"张三",age:21,job:{
    name:"WebKaiFa"
}};
let personCopy = {};
// 解构源对象 赋值给personCopy空对象
({address:personCopy.address} = person)
console.log(personCopy); // {address: undefined}

报错:因为address在源对象上找不到该属性

代码语言:javascript
复制
let person = {name:"张三",age:21,job:{
    name:"WebKaiFa"
}};
let personCopy = {};
// 解构源对象 赋值给personCopy空对象
({address:{
    p:personCopy.address
}} = person)
console.log(personCopy);
// 报错:Uncaught TypeError: Cannot read properties of undefined (reading 'p')

6. 参考上下文匹配

在函数参数列表中也可以进行解构赋值,对参数的解构赋值不会影响到arguments对象,但可以在函数签名中声明在函数体内使用局部变量

代码语言:javascript
复制
let person = {name:"张三",age:21}
function PrintPerson(foo,{name,age},bat){
    console.log(arguments);
    console.log(name,age) //  张三 21
}
PrintPerson('star',person,'end')
// Arguments(3) ['star', {…}, 'end', callee: (...), Symbol(Symbol.iterator): ƒ]0: "star"1: {name: '张三', age: 21}age: 21name: "张三"[[Prototype]]: Object2: 

7. 总结一下

ES6对象解构语法的优点和好处有以下几点:

  • 可以方便地从对象中提取属性值,不需要使用点运算符或中括号。
  • 可以给变量赋予默认值,避免undefined或null的情况。
  • 可以使用别名,给变量取一个与对象属性名不同的名字。
  • 可以嵌套解构,从对象的深层属性中提取值。
  • 可以与函数参数结合,简化函数的定义和调用。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 简单使用
  • 1. 解构源对象不存在的属性,会打印成来undefined
  • 2. 在解构赋值的同时可以定义默认值,这就有效解决了前面的源对象未定义该 属性的问题
  • 3. 解构并不要求变量必须在结构表达式中声明,不过,如果给事先声明的 变量 赋值,则赋值表达式必须包含在一对括号当中
  • 4. 嵌套解构
  • 6. 参考上下文匹配
  • 7. 总结一下
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档