Как вернуть значение в функции с одной строкой в Javascript?

1

Это работает:

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;}

но я до сих пор не могу понять, почему предыдущий не работает.

  • 4
    Во втором примере вы возвращаете payload , в третьем вы возвращаете payload.qty , для которого вы установили значение 1.
  • 1
    jsfiddle.net/yak613/bgxpatgs . Это возвращает payload .
Показать ещё 3 комментария
Теги:
ecmascript-6
function

2 ответа

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 который является новым объектом.

  • 0
    Да, я подумал об использовании Object.assign, но подумал, что это слишком многословно или я упустил что-то очевидное. Я на самом деле изучаю функциональное программирование с помощью JS, и Object.assign действительно, кажется, способ сделать это при соблюдении неизменности.
4

Назначение в JavaScript возвращает назначенное значение. Например,

a = b = 1;

анализируется как

a = (b = 1);

Значение выражения b = 1 равно 1, поэтому мы присваиваем это a. Аналогично, результат в вашем втором примере анализируется как

return (payload.qty = 1)

Значение выражения payload.qty = 1 равно 1, так что это то, что возвращается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню