ES6:在解构时改变一个值

ES6: change a value while destructuring

假设我有一个对象

const obj = { width: 100, height: 200 }

我希望将该对象传递给方法

myFunc( obj );

在那个方法里面我想拉出高度,但同时减去一个值。我只希望这样做一次,之后它永远不会改变。

执行以下操作可以获得我想要的正确高度,比如 150。

let {height: localHeight} = obj;
localHeight = localHeight - 50;

如何在一行中完成上述操作? 类似这样的东西 - 但我知道这行不通。

const { height: (localHeight = localHeight - 50) } = obj

这是可能的,尽管它是一种损害可读性的 hack,可能会产生错误(如果该对象将来包含伪造的 属性),并且不应在真正的产品。

您可以解构一个不存在的 属性,并使用默认值进行减法。

const obj = { width: 100, height: 200 }

const { height, localHeight = height - 50 } = obj

console.log(localHeight)

不,这是不可能的。解构就是这样做的,它将属性分配给目标表达式。赋值语法没有任何修饰符来改变赋值(默认初始化器已经是一个延伸)。

只是不要使用解构,你可以在一条语句中完成它:

const localHeight = obj.height - 50;

比您通过解构可以实现的任何事情都更短、更简单。