当前位置: 首页 > news >正文

ES6中的数组解构赋值【详解】

文章目录

    • 1.数组的解构赋值
      • 1.1 基本用法
      • 1.2 默认值
      • 1.3更多对象解构赋值

1.数组的解构赋值

1.1 基本用法

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

let [a, b, c] = [1, 2, 3];

如果解构不成功,变量的值就等于undefined

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

以上两种情况都属于解构不成功,foo的值都会等于undefined

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

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

如果等号的右边不是数组(或者严格地说,不是可遍历的结构,参见《Iterator》一章),那么将会报错

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

1.2 默认值

结构赋值允许指定默认值。

let [foo = true] = [];
foo // truelet [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'

注意,ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,只有当一个数组成员严格等于undefined,默认值才会生效。

let [x = 1] = [undefined];
x // 1let [x = 1] = [null];
x // null

上面代码中,如果一个数组成员是null,默认值就不会生效,因为null不严格等于undefined

如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值。

function f() {console.log('aaa');
}let [x = f()] = [1];

上面代码中,因为x能取到值,所以函数f根本不会执行。上面的代码其实等价于下面的代码。

let x;
if ([1][0] === undefined) {x = f();
} else {x = [1][0];
}
//[1][0]指的是数组[1]中的一个元素

默认值可以引用解构赋值的其他变量,但该变量必须已经声明。

let [x = 1, y = x] = [];     // x=1; y=1
let [x = 1, y = x] = [2];    // x=2; y=2
let [x = 1, y = x] = [1, 2]; // x=1; y=2
let [x = y, y = 1] = [];     // ReferenceError: y is not defined

上面最后一个表达式之所以会报错,是因为xy做默认值时,y还没有声明。

1.3更多对象解构赋值

数组的解构赋值

对象的解构赋值

字符串的解构赋值

数值与布尔值的解构赋值

函数参数的解构赋值

解构赋值实战用途

http://www.lryc.cn/news/301400.html

相关文章:

  • error An unexpected error occurred: “https://registry.npm.taobao.org
  • react中commit工作流程
  • C++类和对象-多态->多态的基本语法、多态的原理剖析、纯虚函数和抽象类、虚析构和纯虚析构
  • QShortcut
  • 浅谈语义分割、图像分类与目标检测中的TP、TN、FP、FN
  • Python基础教程:解构
  • Java 学习和实践笔记(12)
  • 学习数据结构和算法的第9天
  • 大龙谈智能内容 - 开工大吉
  • 中科大计网学习记录笔记(十二):TCP 套接字编程
  • 落实三大阶段目标,TRON全方位打通与BTC生态互联
  • MCU中断控制
  • C语言中的可变参数
  • Leetcode-103. 二叉树的锯齿形层序遍历
  • vs code“无法与远程服务器建立连接:XHR failed.”解决办法
  • 第五节 zookeeper集群与分布式锁_2
  • Shell脚本——提取目录名和文件名
  • wps使用方法(包括:插入倒三角符号,字母上面加横线,将word中的所有英文设置为time new roman)
  • 备战蓝桥杯---图论之最小生成树
  • 爬虫-华为云空间备忘录导出到docx-selenium控制浏览器行为-python数据处理
  • 网络安全的新防线:主动进攻,预防为先
  • 基于java springboot+mybatis学生学科竞赛管理管理系统设计和实现
  • 秒懂百科,C++如此简单丨第二十一天:栈和队列
  • STM32-开发环境之STM32CubeMX
  • [晓理紫]CCF系列会议截稿时间订阅
  • 重复导航到当前位置引起的。Vue Router 提供了一种机制,阻止重复导航到相同的路由路径。
  • 如何在 Angular 中使用 Flex 布局
  • 通俗的讲解什么是机器学习之损失函数
  • 快速搭建PyTorch环境:Miniconda一步到位
  • 图灵日记之java奇妙历险记--抽象类和接口