<h1>5、解构赋值(一)</h1>
<div><h3>5.1、对象解构</h3>
<p>
<span>在ES6中,对象和数组可以使用解构功能,可以按照一定模式从对象和数组中提取值,对变量进行赋值。对象解构是在一个赋值操作符的左边放置一个对象字面量。</span>
<br>例:
let book={
title:"九章算术",
isbn:"987654321",
price:108
}
let {title,isbn,price}=book;
console.log(title);//输出:九章算术
console.log(isbn); //输出:987654321
console.log(price);//输出:108
在例中book.title的值存储在名为title的变量中。
</p>
<p>
<span>注意:如果使用var、let或者const解构声明变量,必须提供初始化程序,即等号右边必须提供值,否则会导致语法错误。</span>
<br>例:
var {title,isbn,price};
let {title,isbn,price};
const{title,isbn,price};
</p>
<p>
<span>如果变量之前已经声明了,那么需要使用圆括号把整个解构赋值语句包起来。</span>
<br>例:
let title,isbn,price;
({title,isbn,price})=book;
</p>
<p>
<span>使用解构赋值表达式的时候,如果指定的局部变量名称在对象中不存在,这个局部变量会被赋值为undefined(未定义),可以考虑为这个变量定义一个默认值,在变量名称后面加一个等号和相应的默认值即可。</span>
<br>例:
let {title,isbn,salesVolume=0} = book;//上面案例中book对象没有salesVolume属性
</p>
<p>
<span>如果希望再使用解构赋值时,使用与对象属性名不同的局部变量名称,可以采用“属性名:局部变量名”的语法形式。</span>
<br>例:
let {title:booktitle,isbn:bookisbn} = book;
//读取title属性的值存储在变量booktitl中,注意右边变量名,左边要读取的对象的属性名。
</p>
<p>
<span>关于嵌套的对象如何通过解构语法提取值:</span>
<br>例:
let book={
category:{id:1,name:"web"}}
let {title,isbn,category:{name:category}} = book;
//在找到book对象的category属性后继续往下找name属性,然后将值赋给category局部变量
</p>
<p>
<span>展开运算符和对象解构赋值</span>
<br>例:
let book={
title:"九章算术",
isbn:"987654321",
price:108
}
let {...newbook}=book;
let {salesVolume}=book;//取出book对象中的salesVolume属性并赋值给salesVolume变量
console.log(newbook);//输出:book对象
console.log(salesVolume);//输出:undefined