ES6 对象解构

举报
SHQ5785 发表于 2024/03/16 14:46:38 2024/03/16
【摘要】 一、前言前端开发过程中,对于后台返回的对象,若包含属性过多,需要一一定义变量接收对象属性,该过程过于繁琐,增加了代码量。好在ES6提供了对象解构方法帮助我们解决这一问题。 二、语法介绍 2.1 提取属性对象解构的基本语法非常简单:const { identifier } = expression;其中,identifier是要访问的属性名称,expression为一个对象。这是使用属性访问...

一、前言

前端开发过程中,对于后台返回的对象,若包含属性过多,需要一一定义变量接收对象属性,该过程过于繁琐,增加了代码量。好在ES6提供了对象解构方法帮助我们解决这一问题。

二、语法介绍

2.1 提取属性

对象解构的基本语法非常简单:

const { identifier } = expression;

其中,identifier是要访问的属性名称,expression为一个对象。

这是使用属性访问器的等效代码:

const identifier = expression.identifier;

让我们在实践中尝试对象分解:

const hero = {
  name: 'Batman',
  realName: 'Bruce Wayne'
};
const { name } = hero;
name; // => 'Batman'

该语句const { name } = hero定义变量name,并使用hero.name对其进行初始化。

2.2 提取多个属性

要将对象分解为多个属性,请枚举任意数量的属性,并,在之间添加逗号:

const { identifier1, identifier2, ..., identifierN } = expression;

其中identifier1,…identifierN是要访问的属性的名称,expression为对象。

这是等效的代码:

const identifier1 = expression.identifier1;

const identifier2 = expression.identifier2;

// ...

const identifierN = expression.identifierN;

让我们再次看一下第一部分中的示例,其中提取了2个属性:

const hero = {
  name: 'Batman',
  realName: 'Bruce Wayne'
};
const { name, realName } = hero;
name;     // => 'Batman',
realName; // => 'Bruce Wayne'

const { name, realName } = hero创建2个变量namerealName分配相应属性hero.namehero.realName

三、使用解构从对象中获取值

对象解构最基本的用法是从对象中检索属性值。

例如,定义了一个对象,包含两个属性:name和age。

const User = {
  name: 'No Silver Bullet',
  age: 18
}

传统上,使用点 (.) 表示法或下标 ([]) 表示法从对象中检索值。下面的代码片段显示了使用点符号检索对象的值id和name从对象中检索值的示例。

const name = User['name'];
const age = User.age;

当然这两种方式在当前情况下是没有问题的,但是当User的属性多了,就要不停的复制粘贴,产生很多重复代码。

有了解构赋值,就可以快速获取值。例如使用对象的键名来创建变量,并将对象的值分配给相同的键。这样无论有多少属性,只要赋值属性名即可,同样的也减少了很多重复代码。

const { name, age } = User;

四、使用解构从嵌套对象中获取值

在上面的例子中,User只是一个简单的单层对象,在日常的开发中会经常遇到嵌套对象,那么使用解构赋值,该如何检索嵌套对象中的值。下面重新定义User对象,给这个对象新增一个contact属性,它包含着User的phone。

const User = {
  name: 'No Silver Bullet',
  age: '18',
  contact:{
    phone:'110',
  }
}

如果用.的方式获取phone值,需要提供以下方式。

const phone = User.contact.phone;

若使用解构赋值,写法如下:

const  {contact:{phone}}=User
console.log(phone)  // 输出10.

无论嵌套层有多深,只要按照这个写法,一定会拿到具体的值。

五、使用对象解构定义一个新变量以及默认值

在日常开发的过程中,可能会遇到很多极端的情况,例如后端传过来的对象,可能会缺失某些字段。

const User = {
  name: 'No Silver Bullet',
}

或者属性没有具体的值:

const User = {
  name: 'No Silver Bullet',
  age: ''
}

当使用解构赋值的话:无论是否存在age属性的话,都会创建age变量。

const { name, age } = employee;

当User.age没有具体值时,可以使用以下方式给age一个默认值。

const { name, age=18 } = employee;

如何创建一个全新的变量并分配一个使用对象属性值计算的值?

当需要输出User属性的组合值时,应该怎么做呢?示例如下:

const { name,age,detail = `${name} 今年 ${age} `} = User ;
console.log(detail); // 输出:No Silver Bullet 今年 18 

六、使用 JavaScript 对象解构别名

JavaScript 对象解构中,可以为解构变量alias命名,以减少变量名冲突。

const User = {
  name: 'No Silver Bullet',
  age: ''
}

假设想用解构赋值获取age属性的值,但是代码中已经定义age这个变量,这个时候就需要在解构时定义别名解决命名冲突问题。

const { age: userAge } = User;
console.log(userAge); // 18

而如果使用age的话,会报错。

console.log(age);

在这里插入图片描述

七、使用对象解构处理动态名称属性

开发过程中,经常将 API 响应数据作为 JavaScript 对象处理。这些对象可能包含动态数据,作为客户端,甚至可能事先不知道属性键名称。

const User = {
  name: 'No Silver Bullet',
  age: ''
}

将键作为参数传递时,可以编写一个返回User对象属性值的函数。使用[]来接受参数,js会根据这个键对从对象中检索!

function getPropertyValue(key) {
    const { [key]: returnValue } = User;   
    return returnValue;
}
const contact = getPropertyValue('contact');
const name = getPropertyValue('name');
console.log(contact, name); // 空  No Silver Bullet

八、在函数参数和返回值中解构对象

使用对象解构将属性值作为参数传递给函数。

const User = {
  name: 'No Silver Bullet',
  age: 18
}

创建一个简单的函数,该函数使用和属性值创建一条消息。

function consoleLogUser({name, age}) {
  console.log(`${name} 今年 ${age}`); 
}

直接将值作为函数参数传递并在内部使用它们。

consoleLogUser(User); // No Silver Bullet 今年 18

九、解构函数对象返回值

对象解构函数还有另一种用法。如果函数返回一个对象,可以将值直接解构为变量。

function getUser() {
  return {
    'name': const { age } = getUser();
    'age': 18
  }
}

const { age } = getUser();
console.log(age); // 18

十、在循环中使用对象解构

若遍历数组并想要使用每个员工对象的属性值。

const User= [
  { 
       'name': '爱分享的No Silver Bullet',
   		 'age': 16
  },
  { 
      'name': '搞前端的No Silver Bullet',
   		 'age': 18
  },
  { 
        'name': '敲代码的No Silver Bullet',
   		 'age': 20
  }
];

可以使用for-of循环遍历User对象,然后使用对象解构赋值语法来检索详细信息。

for(let {name, age} of employees) {
  console.log(`${name} 今年${age}岁!!!`);
}
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。