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}"
是否有单行解决方案来指定r
,g
,b
以及color
?
答案 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});
至于我相信你所期待的,我认为不可能。