变量的解构赋值

xiaoxiao2021-02-28  58

变量的解构赋值

数组的解构赋值

基本方法

let a = 1; let b = 2; let c = 3; //es6 解构 let [a, b, c] = [1, 2, 3];

只要模式相同就可以匹配

let [foo, [[bar], baz]] = [1, [[2], 3]]; foo // 1 bar // 2 baz // 3 let [ , , third] = ["foo", "bar", "baz"]; third // "baz" let [x, , y] = [1, 2, 3]; x // 1 y // 3 let [head, ...tail] = [1, 2, 3, 4]; head // 1 tail // [2, 3, 4] let [x, y, ...z] = ['a']; x // "a" y // undefined z // []

有默认值的解构赋值

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

只有当赋值为undefined时才会使用默认值,null时不会

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

默认值为表达时 只有用到时才会求值

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

对象解构赋值

对象的结构赋值

let { foo, bar } = { foo: "aaa", bar: "bbb" }; foo // "aaa" bar // "bbb" 属性名必须完全相同

属性名不同的解构赋值

let { foo: baz } = { foo: "aaa", bar: "bbb" }; baz // "aaa" foo // error: foo is not defined

嵌套赋值

let obj = { p: [ 'Hello', { y: 'World' } ] }; let { p, p: [x, { y }] } = obj; x // "Hello" y // "World" p // ["Hello", {y: "World"}]

对于已经声明的变量 为了防止解析时当做一个代码块 必须在外面加上括号

// 正确的写法 let x; ({x} = {x: 1});

字符串解析赋值

const [a, b, c, d, e] = 'hello'; a // "h" b // "e" c // "l" d // "l" e // "o"

数值和布尔值的解析赋值

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

函数参数的解构赋值

用法

function add([x, y]){ return x + y; } add([1, 2]); // 3 原传入一个数组 解构赋值为几个变量

如果要对已经声明的变量进行解构赋值的话 要使用圆括号

[(b)] = [3]; // 正确 ({ p: (d) } = {}); // 正确 [(parseInt.prop)] = [3]; // 正确
转载请注明原文地址: https://www.6miu.com/read-2625926.html

最新回复(0)