zoukankan      html  css  js  c++  java
  • 数组的解构赋值

    数组的结构赋值

    let a = 1;
    let b = 2;
    let c = 3;
    //ES6 允许写成下面这样。
    let [a, b, c] = [1, 2, 3];

    这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值

    嵌套写法

    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 // []

    如果解构不成功,变量的值为undefined。以下两种情况都属于解构不成功,foo的值都会等于undefined。

    let [foo] = [];
    let [bar, foo] = [1];

    另一种情况是完全不解构,即等号左边的模式只匹配一部分等号右边的数组,但依然可以解构成功。例如下面代码。

    let [x, y] = [1, 2, 3];
    x // 1
    y // 2
    
    let [a, [b], d] = [1, [2, 3], 4];
    a // 1
    b // 2
    d // 4

    如果等号右边是不可遍历的解构,那么将会报错。

    // 报错
    let [foo] = 1;
    let [foo] = false;
    let [foo] = NaN;
    let [foo] = undefined;
    let [foo] = null;
    let [foo] = {};

    上面的语句都会报错,因为他们不具备Iterator接口,也就是说他们不可被遍历。

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

  • 相关阅读:
    完全背包笔记
    渗透测试之信息收集常用网站
    结对项目-四则运算"软件"之升级版
    第三次作业:个人项目-小学四则运算“软件”之初版
    分布式版本控制系统Git的安装与使用
    第一次作业:准备
    爬虫综合大作业
    爬取全部校园新闻
    理解爬虫原理
    中文词频统计与词云生成
  • 原文地址:https://www.cnblogs.com/bfc0517/p/8297717.html
Copyright © 2011-2022 走看看