ES6新增语法 对象解构

简介: ECMAScript6引入的对象解构语法允许在一行代码中完成多个赋值操作。例如,从一个包含姓名和年龄的对象中提取属性,传统方法需分别获取,而使用解构赋值可简洁实现相同功能。此外,它支持为未定义的属性设置默认值、对已声明变量的解构赋值(需加括号)、嵌套解构以及在函数参数中直接解构等特性,极大提升了代码的可读性和编写效率。

介绍

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

简单使用

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

let person = {
   
   name:"张三",age:21}
let personName = person.name
let personAge = person.age
console.log(personName) // 张三
console.log(personAge) // 21

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

let person = {
   
   name:"张三",age:21}
let {
   
   name:PersonName,age:PersonAge} = person
console.log(PersonName,PersonAge) // 张三,21

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

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

let person = {
   
   name:"张三",age:21}
let {
   
   name:PersonName,job:PersonAge} = person
console.log(PersonName,PersonAge) // undefined

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

let person = {
   
   name:"张三",age:21}
let {
   
   name:PersonName,job="WebKaiFa"} = person
console.log(PersonName,job) // 张三 WebKaiFa

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

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

let personName,personAge;
let person = {
   
   name:"张三",age:21};
{
   
   name:personName,age:personAge} = person;
console.log(personName,personAge);
//  Uncaught SyntaxError: Unexpected token ':'

加了括号(正常输出)

let personName,personAge;
let person = {
   
   name:"张三",age:21};
({
   
   name:personName,age:personAge} = person)
console.log(personName,personAge); // 张三 21

4. 嵌套解构

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

20.jpg

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

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

显示undefined

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

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

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对象,但可以在函数签名中声明在函数体内使用局部变量

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的情况。
  • 可以使用别名,给变量取一个与对象属性名不同的名字。
  • 可以嵌套解构,从对象的深层属性中提取值。
  • 可以与函数参数结合,简化函数的定义和调用。
目录
相关文章
ES6学习(2)解构赋值
ES6学习(2)解构赋值
ES6学习(3)模板字符串、简化对象和函数写法
ES6学习(3)模板字符串、简化对象和函数写法
|
3月前
|
JavaScript 前端开发
ES6+ 特性,箭头函数、解构赋值、模块导入
ES6+ 特性,箭头函数、解构赋值、模块导入
|
4月前
|
存储 API
ES6新增语法 扩展运算符
ES6新增语法 扩展运算符
27 0
|
6月前
|
JavaScript 前端开发 Java
【JavaScript】ECMAS6(ES6)新特性概览(二):解构赋值、扩展与收集、class类全面解析
【JavaScript】ECMAS6(ES6)新特性概览(二):解构赋值、扩展与收集、class类全面解析
61 2
|
6月前
|
Web App开发 JavaScript iOS开发
技术笔记:js数组定义和方法(包含ES5新增数组方法)
技术笔记:js数组定义和方法(包含ES5新增数组方法)
|
7月前
|
小程序
es6学习笔记(二)解构赋值
es6学习笔记(二)解构赋值
|
JSON 数据格式
ES6系列笔记-解构赋值
ES6系列笔记-解构赋值
68 1
ES6中的新增属性——解构赋值
ES6中的新增属性——解构赋值
ES6语法: 解构赋值
ES6语法: 解构赋值
58 0
下一篇
DataWorks