一、ES6解构赋值
1.数组解构赋值
数组结构赋值
let a=1,b=2,c=3
let [a,b,c]=[1,2,3]
2.定义默认值
let [a,b=3]=[4]
3.对象解构赋值
let {a,b}={a:5,b:6}
let obj = {
p: [
'Hello',
{ y: 'World' }
]
};
let { p: [x, { y }] } = obj;
var {a,b:{a:a1}}={a:5,b:{a:6}};
console.log(a,a1);
(1)对象解构赋值是按照属性名解构,和顺序无关
(2)没有该属性是无法解构赋值
(3)对象解构必须按照结构解构
(4)如果解构是属性名有重复,可以在属性名使用:新名称来解构
4.字符串的解构赋值
let [a,b,c,d,e]="abcde"
let {length : len} = 'hello'
5.数值和布尔值的解构赋值
let {toString: s} = 123;
let {toString: s} = true;
解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。
6.函数参数的解构赋值
function add([x, y]){
return x + y;
}
add([1, 2]);
使用解构赋值让函数具有默认值
function move({x = 0, y = 0} = {}) {
return [x, y];
}
7.解构赋值尽量不要使用小括号
二、解构赋值的用途
1.交换变量
(1)let x=2;
let y=3;
[x,y]=[y,x]
(2)if(arr[i]>arr[i+1]){
[arr[i],arr[i+1]]=[arr[i+1],arr[i]];
}
2.从函数返回多个值
function example() {
return [1, 2, 3];
}
let [a, b, c] = example();
3.函数参数的定义
function f({x, y, z}) { ... }
f({z: 3, y: 2, x: 1});
4.提取 JSON 数据
let jsonData = {
id: 42,
status: "OK",
data: [867, 5309]
};
let { id, status, data: number } = jsonData;
5.函数参数的默认值
(1)function move({x = 0, y = 0} = {}) {
return [x, y];
}
(2)function fn(a,b=4){
console.log(a,b);
}
fn(3,5);//打印3,5。其中,5将出默认值4覆盖
fn(3);//打印3,4。其中,b具有默认值4
6.输入模块的指定方法
const { SourceMapConsumer, SourceNode } = require("source-map");