欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES6(阮一峰)学习笔记(二)解构赋值

程序员文章站 2023-12-21 13:15:34
...

一、解构赋值

  • 定义:按照一定规则从数组和对象中提取值,对变量进行赋值
  • 支持嵌套

(1)数组

1、基本用法

一般用法:

let [a, b, b] = [0, 1, 2];

部分解构:

let [a, b] = [1];

console.log(a);//1
console.log(b);//undefined

对于数组的解构赋值,有:

等号右边需要是可遍历结构,或者说本身具备Iterator接口在转成对象以后具备Iterator接口。

 

2、默认值

可以给左边的变量赋予默认值

默认值生效条件为:解构赋值后,该变量成为了undefined(右边赋值为undefined 或者根本未赋值),此时该变量的值变成默认值。

必须是通过严格相等符号===判断为undefined,默认值才会生效。

 

当默认值为表达式,则会在用到它之后,才会进行求值。

function foo() {
    return 2;
}
let [a = foo()] = [1]

//a = 1

 

(2)对象

  • 支持嵌套
  • 对象的解构赋值与数组的重要不同为:严格按“键值对”赋值,而不是顺序。
  • 对于右边不存在的属性,左边的变量值会成为undefined。
  • 支持取得继承来的属性

1、基本用法

如果变量名需要与右边属性名不一致,则应写成:

let {foo: util} = {foo: "test"};
//util = test

由此可见,对象解构赋值的实际写法为:

let {foo: foo} = {foo: "test"}

此时对于{foo: foo},左边是匹配模式,右边才是变量。

 

对于嵌套解构,若右边不存在父属性,只有子属性,那么会报错。原因很简单,你无法取得一个undefined的子属性

 

2、默认值

基本用法与数组相似

 

3、注意事项

  • {a} = {a: "test"};会报错,行首的{}会被js解析成代码块。应用()包裹整个表达式
  • 允许左边不放任何变量,合法且不会报错
  • 数组也是特殊的对象,也可以用{下标: 值}的方式进行对象解构赋值

 

(3)字符串

类似于数组的解构赋值,具备一个length属性,可以对其解构赋值

let {length: l} = "test"
// l = 4 

 

(4)数值和布尔值

先转为对象Number/Boolean,在进行解构赋值。

由于undefined和null无法转为对象或者数组,对其解构赋值会报错。

 

(5)函数参数

函数参数对传入的参数进行解构赋值,规则跟其他情况差不多。

对于多传入的参数,函数内部并不能感受到。

 

(6)圆括号

ES6不允许在容易导致解构出现歧义的情况使用括号。

如:

  • 声明变量语句左边
  • 函数参数
  • 表达式赋值语句左边
  • 左边整个或者部分的匹配模式

允许使用圆括号的情况:

赋值语句中的非模式部分,即“键值对”的值部分可以使用。

引用阮大的例子:

[(b)] = [3]; // 正确
({ p: (d) } = {}); // 正确
[(parseInt.prop)] = [3]; // 正确

 

(7)用途 

解构赋值的用法有两个方向:

  • 等待传入数据,对数据进行解构赋值。
  • 对一个对象或数组进行解构,获取我们需要的值。

1、方便地交换两个变量值:[x, y] = [y, x]。

2、函数返回一个对象或数组,其他地方接收的时候。

3、给函数参数传参。

4、获取JSON数据。

5、函数参数给予默认值。

6、对map对象解构赋值,通过for...of方便地拿到key/value。

7、常用的import/require的{util1, util2}按需导入。

相关标签: ES6学习 ES6

上一篇:

下一篇: