解构赋值内容整理

2020-09-27  本文已影响0人  Ordenme

解构赋值

使用let const生明过的变量在解构赋值时不能再次声明。

let foo;
let {foo} = {foo: 1}; // SyntaxError: Duplicate declaration "foo"

解构赋值分3种结果:
1、解构成功。
2、不完全解构。(也属解构成功)
3、解构失败。
解构赋值两种运用情况:
1、数组。
2、对象。
解构赋值是通过模式匹配成功来取值和赋值。
关键词:模式、匹配
数组:
数组解构赋值模式匹配的是位置,即等号左边的数组位置要与右边的数组位置一一对应,位置匹配成功后则可以解构成功。

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

只匹配一部分的等号右边的数
当等号左边数组的位置与右边的数组位置可以对应一部分,则会不完全解构。

let [a] = [1,2]
//a 1

当等号左边数组的位置与右边的数组位置不能一一对应,则会解构失败。
解构失败是因为等号左边的模式与右边的模式不同

let [a,b]=[1]
var [foo] = [];
//解构失败报错

对象:
对象解构赋值模式匹配的是名字(即key/属性名)

成功
let { foo,bar} = {"foo":123,"bar":456}
// foo   123
// bar   456
不完全
let { foo} = {"foo":123,"bar":456}
// foo   123
失败
let { foo1} = {"foo":123,"bar":456}
//没有相同的foo1属性名,可以认为解构失败,取到的值是undefind
//foo1  undefind
如果变量名与属性名不一致,必须写成下面这样。
var { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"
foo // error: foo is not defined

foo报错原因:这个foo是对象中要匹配的模式。

上一篇下一篇

猜你喜欢

热点阅读