# 章序号/节序号/节/笔记序号
- Objective:
# 概念阐释
## 语义
**解构赋值**语法是一种 Javascript 表达式。可以将数组中的值或对象的属性取出,赋值给其他变量。
## 语法
```js
const propertyName = obj.propertyName;
const {propertyName} = obj;
const {nestedProperty} = obj.outerProperty;
```
# 举例子
## 解构Arrays
```js
let cars = ['ferrari','tesla','cadillac'];
let [car1,car2,car3] = cars;
console.log(car1,car2,car3);
```
## 解构对象
```js
let destinations = { x: 'LA', y: 'NYC', z: 'MIA' };
let {x,y,z} = destinations;
```
```js
const vampire = {
name: 'Dracula',
residence: 'Transylvania',
preferences: {
day: 'stay inside',
night: 'satisfy appetite'
}
};
//非解构写法
vampire.residence;
//访问residence属性
const residence = vampire.residence;
const {residence} = vampire;
//访问day属性
const{day} = vampire.preferences;
```
## 解构函数参数
```js
let truck = {
model: '1977 Mustang convertible',
maker: 'Ford',
city: 'Detroit',
year: '1977',
convertible: true
};
const printCarInfo = ({model,maker,city}) => {
console.log(`The ${model}, or ${maker}, is in the city ${city}.`)
}
printCarInfo(truck);//调用对象名称
```
```js
const ObjectInfo = {
firstName = "Ari",
lastName = "Bietkes",
age:34
};
function customerGreeting({firstName,secondName}) {
console.log(`My name is ${firstName}${lastName}.`)
};
//调用函数
customerGreeting(ObjectInfo);
```
# 类比、比较与对比
- 一般情况下[[js objects 对象属性|访问对象]]都是通过`对象名称.属性` 或者`对象名称[属性]`来访问, 称为结构。解构相当于反着写。
- 解构访问对象需要用到变量`const`, 正常访问不需要。
# 问题
- [练习题](https://www.codecademy.com/courses/introduction-to-javascript/lessons/advanced-objects/exercises/destruct-assign)
用非解构的写法,`{functionality}`, `{beep}` 分别print `Beep Boop`。
# 问题答案
因为`{functionality}`相当于`robot.functionality`,所以访问beep可以直接使用`functionality.beep();`
```js
const robot = {
model: '1E78V2',
energyLevel: 100,
//这是一个内嵌对象,但内嵌的内容为方法
functionality: {
beep() {
console.log('Beep Boop');
},
fireLaser() {
console.log('Pew Pew');
},
}
};
robot.functionality.beep();
const {beep} = robot.functionality;
beep();
const {functionality} = robot;
functionality.beep();
```
# 备注(经验集/错误集)
## summary
解决的怎么样?
## 参考资料
[解构赋值-MDN](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)