Skip to content

Latest commit

 

History

History
69 lines (62 loc) · 1.69 KB

2.解构赋值.md

File metadata and controls

69 lines (62 loc) · 1.69 KB

解构赋值

ES6允许按照一定模式, 从数组和对象中提取值, 对变量进行赋值,成为解构赋值

// 数组解构
let [a, b, c] = [1, 2, 3];
let [, , third] = ['a', 'b', 'c'];
let [foo, [[bar], baz]] = [1, [[2], 3]];
// 配合默认值
let [foo = true] = [];
foo // true

默认值

在解构赋值时,若值严格(===)等于undefined,则使用默认值。 注意: 换言之,如果取值结果为null, 则不会使用默认值

let { x = 3 } = { x: null }
x // null
let { y = 3 } = { y: undefined }
y // 3

对象的解构赋值

let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
foo // 'aaa'
bar // 'bbb'

若需要解构值赋给不同的变量名

let { foo: foo1, bar: bar1 } =  = { foo: 'aaa', bar: 'bbb' };
foo1 // 'aaa'
bar1 // 'bbb'

如果变量声明和解构赋值在先后两句语句中,则解构赋值整句必须带上括号

let foo1;
({ foo: foo1 } = { foo: 1});
foo1 // 1

支持嵌套解构的对象解构

var node = { loc: { start: { line: 1, column: 5 } } }
let { loc: { start: { line } } } = node;
// 此处只有产生了一个变量line
line // 1

字符串、数字和布尔值的解构赋值

对字符串和数字能够进行解构也是因为JS会在字符串和数字进行点号运算时将其包装成对象

let {toString: s} = 123;
s === Number.prototype.toString // true

const [a, b, c, d, e] = 'hello';

let {toString: s} = true;
s === Boolean.prototype.toString // true

函数参数的解构赋值

函数参数的解构赋值及默认值与上面的解构相同

function add([x, y]){
    return x + y;
}
add([1, 2]);