# 對象數組解構&賦值
---
**解構:解構是一種打破數據結構,將其拆分為更小部分的過程**
> 示例:
```javascript
//對象解構
let options = {
repeat: true,
save: false
};
// 從對象中提取數據 es5方式
var repeat = options.repeat,
save = options.save;
//es6方式options
let { repeat, save } = repeat; //true
console.log(save); //false
//數組解構
let colors = ['red', 'green', 'blue'];
//獲取綠色與藍色
//es5
var green = colors[1];
var blue = colors[2];
//es6
let [, green, blue] = colors; // 其中 ,可以理解為placeholder
console.log(green, blue); //green,blue
```
**解構賦值**
```javascript
let node = {
type: 'str',
name: 's'
},
type = 'arr',
name = 'a'(
// 使用解構來分配不同的值
({ type, name } = node)
); //同名變量結構賦值 ({ type, name,value = true } = node) 語法糖 node中無value字段給于默認值,如未匹配到也沒有默認值則為undefined
// ({type:myType,name:myName} = node) //非同名變量結構賦值
console.log(type, name); // "str,s"
console.log(myType, myName); // "str,s"
```
**[注意]**
> 一定要用一對【小括號包裹解構賦值語句】,JS 引擎將一對開放的花括號視為一個代碼塊。語法規定,代碼塊語句不允許出現在賦值語句左側,添加小括號后可以將塊語句轉化為一個表達式,從而實現整個解構賦值過程
**對象嵌套解構**
```javascript
let node = {
type: 'str',
name: 's',
loc: {
start: {
line: 1,
column: 1
},
end: {
line: 1,
column: 3
}
}
};
let {
loc: { start }
} = node;
//let {loc: {start:myStart}} = node //非同名嵌套解構
// console.log(myStart) // 1,1
console.log(start.line, start.column); // 1,1
```
**數組解構賦值**
```javascript
//數組解構
let colors = ['red', 'green', 'blue'];
//賦值green,blue
let myGreen, myBlue;
[, green, blue] = colors; // 其中 ,可以理解為placeholder
console.log(myGreen, myBlue); //green,blue
```
**嵌套數組解構**
```javascript
//數組解構
let colors = ['red', ['green', 'light-green'], 'blue'];
//get green,blue
let myGreen, myGreenSon;
[, [myGreen, myGreenSon]] = colors; // 其中 ,可以理解為placeholder
console.log(myGreen, myGreenSon); //green,blue
```
**不定元素數組解構**
```javascript
let colors = ['red', ['green', 'light-green'], 'blue'];
let firstRed, others;
[firstRed, ...others] = colors; // 這里 ... 省略余下所有索引元素重置至others
console.log(firstRed, others);
//復制數組
let colors = ['red', 'green', 'blue'];
let [...newcolors] = colors;
console.log(newcolors); //"[red,green,blue]"
newcolors.push(1);
console.log(colors, newcolors); //"[red,green,blue] [red,green,blue,1]"
```
**解構參數**
```javascript
// options 上的屬性表示附加參數
function getSum(option = []) {
//這里給默認值,未傳值時作為空數組
[...args] = option;
let res = 0;
for (let i = 0; i < args.length; i++) {
const e = args[i];
res += e;
}
return res;
}
console.log(getSum([1, 2]));
// 對象作為參數時 處理方式相同
```
- 01.let-const
- 02.對象數組解構&賦值
- 03.字符串擴展,數值擴展,數組擴展
- 04.數組擴展
- 05.對象擴展
- 06.06.Symbol原始數據類型
- 07.set數據結構
- 08.map數據結構
- 09.proxy與Reflect
- 10.類
- 11.Promise
- 12.Iterator(迭代器)
- 13.Generator(生成器)
- 14.module與模塊化
- 15.es6學習總結
- 記錄- Vue拖拽實例
- 記錄-git使用天坑之分支切換
- node -- session & cookie & localStorge
- 18.12關于前端戰略技術儲備與問題反饋
- Vue組件通信方式總結以及遇到的問題
- 01.版本回溯以及文件修改
- 02.遠端控制
- 03.分支管理
- node 入門 留言板
- nodejs模塊與 commonjs 規范
- 19年技術發展規劃
- JS錯誤處理 -> 提升程序健壯性
- Git 基本使用
- 18年年終總結