以下内容是引用或者借鉴别人的,自己只是做个笔记,方便学习。理解错误的地方,欢迎评论。如有侵权,私聊我删除,未经允许,不准作为商业用途
只写属性名时,变量名将会使用属性名
let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar // "bbb"
// 等同
let { foo: foo, bar: bar } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar // "bbb"
没有对应的同名属性,导致取不到值,变量的值等于undefined
let { baz } = { foo: 'aaa', bar: 'bbb' };
baz // undefined
内部机制:先找到同名属性,再赋给对应的变量,因此真正被赋值的是后者,而不是前者
let { foo: foo, bar: bar2 } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar2 // "bbb"
bar // ReferenceError: bar is not defined
嵌套结构的对象
let obj = {
p: [
'Hello',
{ y: 'World' }
]
};
let { p, p: [x, { y }] } = obj;
x // "Hello"
y // "World"
p // ["Hello", {y: "World"}]
继承的属性
const obj1 = {};
const obj2 = { foo: 'bar' };
Object.setPrototypeOf(obj1, obj2);
const { foo } = obj1;
foo // "bar"
默认值:当一个数组成员严格等于undefined,默认值才会执行代码生效
var {x = 3} = {x: 5};
x // 5
var {x: y = 3} = {x: 5};
y // 5
var {x = 3} = {};
x // 3
var {x = 3} = {x: undefined};
x // 3
var {x = 3} = {x: null};
x // null
特殊情况:解构数组赋值对象
let arr = [1, 2, 3];
let {0 : first, [arr.length - 1] : last} = arr;
first // 1
last // 3
网友评论