这有效:
/
这也有效:(这会返回一个带有qty:1属性的对象)
var power = (x)=>x*x
但这并不是:
let addQty = (payload)=>{payload.qty=1;return payload}
它返回1。 为什么呢?
ps:我知道我可以在语句之后返回值:
let addQty2 = (payload)=>{return payload.qty=1}
,但我仍然无法理解为什么上一个不起作用。
答案 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
返回的值,该值是新对象。