# 对象数组解构&赋值
---
**解构:解构是一种打破数据结构,将其拆分为更小部分的过程**
> 示例:
```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年年终总结