Это работает:
var power = (x)=>x*x
Это также работает: (это возвращает объект с свойством qty: 1)
let addQty = (payload)=>{payload.qty=1;return payload}
Но это не так:
let addQty2 = (payload)=>{return payload.qty=1}
Вместо этого он возвращает 1. Почему?
ps: Я знаю, что могу вернуть значение после утверждения следующим образом:
let addQty2 = (payload)=>{payload.qty=1;return payload;}
но я до сих пор не могу понять, почему предыдущий не работает.
Этот код работает, но понимайте, что вы меняете исходный объект и затем возвращаете его.
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
который является новым объектом.
Назначение в JavaScript возвращает назначенное значение. Например,
a = b = 1;
анализируется как
a = (b = 1);
Значение выражения b = 1
равно 1
, поэтому мы присваиваем это a
. Аналогично, результат в вашем втором примере анализируется как
return (payload.qty = 1)
Значение выражения payload.qty = 1
равно 1
, так что это то, что возвращается.
payload
, в третьем вы возвращаетеpayload.qty
, для которого вы установили значение 1.payload
.