-1

Есть функция которая выводи числа в обратном порядке.

function reverse(number) {
   number += "";
   let reversnumber = "";
   for (let i = number.length-1; i >=0 ; i--) {
      reversnumber += number[i];
      console.log(reversnumber);
   }
   return {"Обратное число": +reversnumber}
}
console.log(reverse(12345))

Вопрос почему выводит 54321, а не сумму (5+4+3+2+1) 15? Вот эта строчка reversnumber += number[i]; говорит о накапливание переменной. С другой стороны если в коде я поменяю данную строку на reversnumber -= number[i]; мне выводит -15. Почему в первом случае выводит при += 54321, а при -= -15

SwaD
  • 10,123
  • 1
    Потому что reversnumber это строка и данные объединяются, а не суммируются – SwaD Feb 25 '23 at 19:39
  • 1
    Ты превратил число в строчку number += ""... Далее работаешь со строкой... А строки конкатенируются, не суммируются. Преврати строку/символ в число - будет сложение. – ksa Feb 25 '23 at 19:41
  • Спасибо, дошло. – Дмитрий Feb 25 '23 at 19:44

1 Answers1

0

Потому что оператор + или объединяет строки (конкатенирует) или складывает числа, а оператор - только вычитает числа друг из друга и не взаимодействует со строками.

Но JS отличный язык и полагает что вы это знаете и учитываете, поэтому он скастовывает ваши буквы в цифры и отлично складывает их, чтобы у вас получилось -15

Починить ваш код можно с помощью несложной магии reversnumber += number[i]; заменить на reversnumber += parseInt(number[i]);

Venta
  • 448
  • Тогда уж детализируйте ответ и поясните, почему при - идет работа с цифрами, а с + со строками ) И как это исправить – SwaD Feb 25 '23 at 19:52
  • ладно тогда можете обьяснить почему при reversnumber += number[i]; выводит 54321, а если += number[i] * 1; выводит 15. Что изменилось? – Дмитрий Feb 25 '23 at 20:05
  • @Дмитрий, умножение "неявно" преобразовало строку в число. Такое преобразование может сделять и унарный + - +"1234". – ksa Feb 25 '23 at 20:09
  • В первом случае вы складываете строчки и + конкатенирует, а во втором вы их кастуете в числа и + их складывает – Venta Feb 25 '23 at 20:10
  • Всем спасибо, разобрался. – Дмитрий Feb 25 '23 at 20:13