在使用解构赋值

时间:2017-10-21 19:45:57

标签: javascript ecmascript-6

ES6引入了destructuring assignment语法,该语法支持从对象中解压缩值:

let { r = 0, g = 0, b = 0 } = { r: 255, g: 55 };
let color = { r, g, b };
console.log(color, r, g, b);  // prints "{r: 255, g: 55, b: 0} 255 55 0"

但是,以下代码段不会产生相同的效果:

let color = { r = 0, g = 0, b = 0 } = { r: 255, g: 55 }
console.log(color);  // prints "{r: 255, g: 55}"

如果您颠倒顺序,则相同:

let { r = 0, g = 0, b = 0 } = color = { r: 255, g: 55 }
console.log(color);  // prints "{r: 255, g: 55}"

是否有单行解决方案来指定rgb以及color

3 个答案:

答案 0 :(得分:4)

您可以先使用Object.assign()创建完整色彩对象(包括其中的所有3个部分),将结果分配给color变量并对其应用破坏:

let { r, g, b } = color = Object.assign({ r: 0, b: 0, g: 0 }, { r: 255, g: 55 });
console.log(r, g, b, color); // prints "255 55 0 {r: 255, b: 0, g: 55}"

不幸的是,这种方法在严格模式下会失败,因为它试图分配给未定义的color变量。解决此问题的一个选择是,如果你color绑定到window就可以了,就是直接分配给window.color(或者如果你在类/函数中这样做,你可以当然要this.color。)



'use strict';

let { r, g, b } = window.color = Object.assign({ r: 0, b: 0, g: 0 }, { r: 255, g: 55 });

console.log(r, g, b, color); // prints "255 55 0 {r: 255, b: 0, g: 55}"




答案 1 :(得分:1)

这不符合你想要的精神,但你总是可以用逗号把它写成一行:

'use strict';

const { r = 0, g = 0, b = 0 } = { r: 255, g: 55 }, color = { r, g, b };

console.log(color, r, g, b);

答案 2 :(得分:0)

就是这样,但我不相信这是你所要求的:

让color =({r = 0,g = 0,b = 0} = {r:255,g:55},{r,g,b});

至于我相信你所期待的,我认为不可能。