为什么 ECMASCRIPT 6 在解构时反转赋值的边?
Why did ECMASCRIPT 6 reverse the sides for assignment when destructuring?
为什么 ES6 决定左侧赋值更有意义或对解构赋值更有用?乍一看,它似乎使代码更容易出错,因为赋值可以在两侧发生,具体取决于情况。
let obj = { first: 'Jane', last: 'Doe' };
let { first: f, last: l } = obj;
// f = 'Jane'
// l = 'Doe'
f 和 l 似乎都在左侧定义,使用左侧 var 名称的组合值和右侧这些 var 的值。
鉴于此语法的基本原理是保持与对象声明语法相同,为什么 ECMA 不改为使用:
let { f: first, l: last } = obj;
因为它应该保留对象文字语法:属性 名称位于冒号之前。语法应该嵌套,如果目标位于左侧,则无法正常工作:
let {propName: [arrayElement, ...moreElements], otherName: {nestedProp: targetName}} = obj;
在你的方法中,它将是
let {[arrayElement, ...moreElements]: propName, {targetName = nestedProp}: otherName} = obj;
冒号没有任何意义。
为什么 ES6 决定左侧赋值更有意义或对解构赋值更有用?乍一看,它似乎使代码更容易出错,因为赋值可以在两侧发生,具体取决于情况。
let obj = { first: 'Jane', last: 'Doe' };
let { first: f, last: l } = obj;
// f = 'Jane'
// l = 'Doe'
f 和 l 似乎都在左侧定义,使用左侧 var 名称的组合值和右侧这些 var 的值。
鉴于此语法的基本原理是保持与对象声明语法相同,为什么 ECMA 不改为使用:
let { f: first, l: last } = obj;
因为它应该保留对象文字语法:属性 名称位于冒号之前。语法应该嵌套,如果目标位于左侧,则无法正常工作:
let {propName: [arrayElement, ...moreElements], otherName: {nestedProp: targetName}} = obj;
在你的方法中,它将是
let {[arrayElement, ...moreElements]: propName, {targetName = nestedProp}: otherName} = obj;
冒号没有任何意义。