为什么ECMASCRIPT 6在解构时会反转各方的分配?

Bri*_*eud 2 javascript ecma ecmascript-6

为什么ES6决定左侧任务更有意义,或者对于结构化任务更有用?刚开始看,它似乎使代码更容易出错,现在根据情况可以在双方进行分配.

let obj = { first: 'Jane', last: 'Doe' };
let { first: f, last: l } = obj;
// f = 'Jane'
// l = 'Doe'
Run Code Online (Sandbox Code Playgroud)

f和l似乎都在左侧定义,使用左侧var名称和右侧vars值的组合值.

鉴于这个sytax的基本原理是保持它与对象声明语法相同,为什么ECMA不会使用:

let { f: first, l: last } = obj;
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 8

因为它应该保留对象文字语法:属性名称在冒号之前.语法应该嵌套,如果目标位于左侧,则无法正常工作:

let {propName: [arrayElement, ...moreElements], otherName: {nestedProp: targetName}} = obj;
Run Code Online (Sandbox Code Playgroud)

在你的方法中,它会

let {[arrayElement, ...moreElements]: propName, {targetName = nestedProp}: otherName} = obj;
Run Code Online (Sandbox Code Playgroud)

结肠没有任何意义.

  • @Bergi 我不是在做一个句法点,而是一个认知点。当你设计一个新的语言结构,使用一种新的运算符时,你有机会决定用什么标记来表达运算符的功能。使用“:”作为`oldkey : newkey`的别名的决定并不完全符合`key : value`的现有范式。 (2认同)