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;
比您通过解构可以实现的任何事情都更短、更简单。
假设我有一个对象
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;
比您通过解构可以实现的任何事情都更短、更简单。