Day1-ES6-3-变量解构赋值
1.数组解构赋值
模式匹配
let [a,b,c] =[1,2,3] // a = 1 b = 2 c = 3
如无匹配值(解构不成功)则变量的值为 undefined
解构可设置默认值
let [a = 1, b = 2] = [ 2 ] // a = 2, b = 2 let [a = 1 , b = 2] = [ undefined, null ] // a = 1, b= null
当数组成员严格等于(===)undefined,默认值才生效。
2.对象解构赋值
同样的模式匹配,解构不成功变量的值为undefined。同数组可设置默认值。
let {aa,bb} = {bb:3,aa:1}
//对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
let { aaa: ccc} = { aaa: '111', ccc: '222' };
ccc // "111"
foo // error: aaa is not defined
//对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。
3.字符串解构赋值
const [a, b, c, d, e] = 'hello'; a // "h" b // "e" c // "l" d // "l" e // "o"
字符串被转化成一个类似数组的对象
4.函数参数解构赋值
function add([x, y]){ return x + y; } add([1, 2]); // 3
5.作用
- 交换变量的值
[x, y] = [y, x];
- 函数返回多个值
function a() { return { id:'1', phone:'136' }; } let {id, phone} = a(); console.log(id,phone); // 1 136
- 函数参数定义
function f([x, y, z]) { ... } f([1, 2, 3]); // 有序对应 function f({x, y, z}) { ... } f({z: 3, y: 2, x: 1});
// 无序对应 - 提取json数据
let jsonData = {
a: 1,
b: 'test',
c: {
aa: '11',
bb: '22'
}
}
let {a: id, title,c={aa: '0',bb:'0',cc:'0'}} = jsonData;
id 1
title undefined
c {aa:11,bb:22} - 函数参数默认值
let data = { a: '1', b: { aa: 11, bb: 22 } } function fuc({a:'0',b:{aa:'00',bb:'00'},c:11}={}){ console.log(a); console.log(b); console.log(c); } fuc(data);
//当fuc()时会报错,需添加{}为整个参数的默认值 - 输入模块的方法
const {fuc1,fuc2} = require("aaa");