通过模式匹配:
因为对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。
let { foo: foo, bar: bar } = { foo: 'aaa', bar: 'bbb' };
console.log(foo); // 'aaa'
let { foo: baz } = { foo: 'aaa', bar: 'bbb' }; // 此时foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo
baz // ’aaa’
foo // error: foo is not defined
let { foo, baz } = { foo: 'aaa', bar: 'bbb' }; // 注意foo和baz中间用的逗号,此时foo作为变量被赋值
console.log(foo); // ’aaa‘
console.log(baz); // undefined 未匹配到baz属性
再看一个例子:
let {number : otherNumber} = {number: 10};
console.log(otherNumber) //10