2.变量的解构赋值

回到目录

前言

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。

提示

本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。下面是一些使用嵌套数组进行解构的例子。
(简单来说就是格式不匹配就会报错)

数组的解构赋值

只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值。

let [foo, [[bar], baz]] = [1, [[2], 3]];
foo; // 1
bar; // 2
baz; // 3

let [, , third] = ["foo", "bar", "baz"];
third; // "baz"

let [x, , y] = [1, 2, 3];
x; // 1
y; // 3

let [head, ...tail] = [1, 2, 3, 4];
head; // 1
tail; // [2, 3, 4]

let [x, y, ...z] = ["a"];
x; // "a"
y; // undefined
z; // []

let [foo, [[bar], baz]] = [1, [4, 3]];
// Uncaught TypeError: [1,[4,3]] is not iterable  at <anonymous>:1:27
// 这里报错的原因是 [bar]  最后只能匹配到 4 ,这两个结构不匹配

let [foo = true] = [];
foo; // true

let [x, y = "b"] = ["a"]; // x='a', y='b'
let [x, y = "b"] = ["a", undefined]; // x='a', y='b'

对象的解构赋值

对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

例子

let obj3 = {
  p: ["Hello", { y: "World" }],
  q: { a: 15 }
};

let {
  p,
  p: [x, { y, z = 16 }],
  q: Q
} = obj3;
x; // "Hello"
y; // "World"
p; // ["Hello", {y: "World"}]
z; // 16
q; // Uncaught ReferenceError: q is not defined
Q; // {a: 15}

总结

类别 结论
数组的解构 按照遍历器 iterator 来依次赋值
对象的解构 按照 key 来配对赋值

例子

let [a, b, c] = { 1: 15, 2: "a", 3: [1, 2, 3] };
// VM191:1 Uncaught TypeError: {(intermediate value)(intermediate value)(intermediate value)} is not iterable

var { 0: a, 1: b } = [12, 15];
a; // 12
b; // 15

其他数据类型的解构

其他数据类型在执行解构之前,会先转换成相应的对象,比如 123456 -> Number(123456), false ->Boolean(false) NaN -> NaN
回到目录

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring...
    Masami_9e88阅读 2,649评论 0 0
  • 1、数组的解构赋值 基本用法 本质上,只要等号两边的模式相同,左边的变量就会被赋予对应的值,...表示将剩下的值赋...
    Elevens_regret阅读 3,342评论 0 0
  • 1. 数组的解构赋值 1.1 “模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值 1.2 如果...
    MrZhou_b216阅读 1,715评论 0 0
  • ES6允许按照一定的模式,从数组和对象中提取值,并对变量进行赋值。这对于解析json数据和函数参数等操作是非常有帮...
    exialym阅读 3,483评论 0 2
  • 我叫王尊,象征我以后一定会飞黄腾达,万事如意,但,在我的人生道路却不是那么“尊”。 “阿尊,你准备去哪所大学念...
    人生的尊阅读 1,441评论 0 0

友情链接更多精彩内容