把参数的传递、赋值看作数组,一一对应

数组状态只在赋值过程中存在,并不改变各自的类型

//同时多个变量赋值
const a, b, rest;
[a, b] = [10, 20];
console.log(a);// expected output: 10
console.log(b);// expected output: 20
[a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(rest);// expected output: [30,40,50]

//同时声明多个变量,并将数组的元素赋值到变量上
constx = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log(y); // 1
console.log(z); // 2
const [a, b, ...rest] = [10, 20, 30, 40, 50];

//提供默认值
const [a=5, b=7] = [1];

//忽略某个的返回值
function f() {
  return [1, 2, 3];
}
const [a, , b] = f();//2没有赋值给任何变量,被忽略了

//交换值
let a = 8, b = 6;
[a,b] = [b,a];

//对象属性,注意变成花括号了
const o = {p: 42, q: true, max: 56.78, today: { low: 64, high: 77 }};
const {p, q} = o;//变量名与属性名自动对应,相当于把对象的属性拉出来作为一个变量使用
const {p:bigP, q:bigQ} = 0;//名称不同时手动匹配,匹配的属性在前,声明的变量在后
//嵌套对象
const {today: {low:lowToday, high:highToday} } = o;
//直接使用作为参数的对象的部分属性
const half = ({max, q}) => (max + q) / 2.0; 
console.log(half(o));