如何在Javascript中使用单行返回函数中的值?

时间:2018-01-12 03:50:57

标签: javascript function ecmascript-6

这有效:

/

这也有效:(这会返回一个带有qty:1属性的对象)

var power = (x)=>x*x

但这并不是:

let addQty = (payload)=>{payload.qty=1;return payload}

它返回1。 为什么呢?

ps:我知道我可以在语句之后返回值:

let addQty2 = (payload)=>{return payload.qty=1}

,但我仍然无法理解为什么上一个不起作用。

2 个答案:

答案 0 :(得分:4)

JavaScript中的赋值返回指定的值。例如,

a = b = 1;

被解析为

a = (b = 1);

b = 1的表达式的值为1,因此我们将其分配给a。同样,第二个示例中的返回被解析为

return (payload.qty = 1)

表达式payload.qty = 1的值为1,因此返回的是。

答案 1 :(得分:3)

此代码有效,但意识到您正在更改原始对象,然后将其返回。

let addQty = payload=>{payload.qty=1; return payload;}

var obj = {
  name: "Some thing",
  price: 9.95
}

var newObj = addQty(obj);

console.log('obj', obj);
console.log('newObj', newObj);

此版本:

let addQty2 = (payload)=>{return payload.qty=1}

将返回最后使用的值而不是对象,因为该对象不是最后一个值。数字1是最后使用的值。

如果您只想影响一个新对象,请尝试:

let addQty = payload=>Object.assign({}, payload, {qty:1});

var obj = {
  name: "Some thing",
  price: 9.95
}

var newObj = addQty(obj);

console.log('obj', obj);
console.log('newObj', newObj);

此函数返回从Object.assign返回的值,该值是新对象。