JavaScript语言的解构(Destructuring)语法

可迭代对象解构是按位置的,而对象字面量解构是按命名的。

注意:解构语法是并行的。

1.可迭代对象解构

1.1用于变量赋值

let [变量名, 变量名 = 默认值, ...数组变量名] = 可迭代对象;
//字符串
let [a, b] = "12";
console.log(a, b);  // 1 2
//数组
//左侧数量等于右侧数量
let [a, b] = [1, 2];
console.log(a, b);  // 1 2

//左侧数量小于右侧数量
//右侧多余的元素会被忽略
let [a, b] = [1, 2, 3];
console.log(a, b);  // 1 2
//右侧多余的元素会被打包成数组字面量
let [a, b, ...rest] = [1, 2, 3, 4, 5];
console.log(a, b, rest);  // 1 2 [3, 4, 5]

//左侧数量大于右侧数量
//左侧多余的变量会被赋予undefined值
let [a, b, c] = [1, 2];
console.log(a, b, c);  // 1 2 undefined
//左侧多余的变量会被赋予默认值
let [a, b, c = 3] = [1, 2];
console.log(a, b, c);  // 1 2 3

//给已声明的变量赋值时,不需要在赋值表达式左侧添加let关键字。
let a, b;
[a, b] = [1, 2];
console.log(a, b);  // 1 2
//映射
let [a, b] = new Map([[1, "one"], [2, "two"]]);
console.log(a, b);  // [1, "one"] [2, "two"]
//集合
let [a, b] = new Set([1, 2]);
console.log(a, b);  // 1 2

左侧的变量还支持占位语法。

注意:左侧不是稀疏数组语法,是占位语法。

//左侧数量等于右侧数量
let [a, ] = [1, 2];
console.log(a);  // 1

//左侧数量小于右侧数量
let [a, ] = [1, 2, 3];
console.log(a);  // 1

//左侧数量大于右侧数量
let [a, ] = [1];
console.log(a);  // 1

1.2用于函数形参

具体参考“用于变量赋值”章节。

function f([a, b]) {
  console.log(a, b);
}

f([1, 2]);  // 1 2

2.对象字面量解构

2.1用于变量赋值

let { 属性名: 变量名, 属性名, 属性名: 变量名 = 默认值, 属性名 = 默认值, ...对象字面量变量名 } = 对象字面量;
//左侧数量等于右侧数量
//属性名与变量名不相同(前面a是右侧对象字面量内的属性名,后面x是变量名)
let { a: x, b: y } = { a: 1, b: 2 };
console.log(x, y);  // 1 2
//属性名与变量名相同(前面a是右侧对象字面量内的属性名,后面a是变量名)
let { a: a, b: b } = { a: 1, b: 2 };
//简写
let { a, b } = { a: 1, b: 2 };
console.log(a, b);  // 1 2

//左侧数量小于右侧数量
//右侧多余的属性会被忽略
let { a, b } = { a: 1, b: 2, c: 3 };
console.log(a, b);  // 1 2
//右侧多余的属性会被打包成对象字面量
let { a, b, ...rest } = { a: 1, b: 2, c: 3, d: 4, e: 5 };
console.log(a, b, rest);  // 1 2 { c: 3, d: 4, e: 5 }

//左侧数量大于右侧数量
//左侧多余的变量会被赋予undefined值
let { a, b, c } = { a: 1, b: 2 };
console.log(a, b, c);  // 1 2 undefined
//左侧多余的变量会被赋予默认值
let { a, b, c = 3 } = { a: 1, b: 2 };
console.log(a, b, c);  // 1 2 3

//给已声明的变量赋值时,不需要在赋值表达式左侧添加let关键字,但赋值表达式必须被包裹在分组运算符()内。
let a, b;
({ a, b } = { a: 1, b: 2 });
console.log(a, b);  // 1 2

2.2用于函数形参

具体参考“用于变量赋值”章节。

function f({ a, b }) {
  console.log(a, b);
}

f({ a: 1, b: 2 });  // 1 2

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/javascriptexp/36650.html

(0)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2025年4月3日 13:43
下一篇 2025年4月3日 16:47

相关推荐

发表回复

登录后才能评论