解构赋值内容整理
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是对象中要匹配的模式。