Подтвердить что ты не робот

Как добавление String с Integer работает в JavaScript?

Следующий код дает странные результаты:

console.log("" + 1 + 10 + 2 - 5 + "8");
4b9b3361

Ответ 1

"" + 1          === "1"
"1" + 10        === "110"
"110" + 2       === "1102"
"1102" - 5      === 1097
1097 + "8"      === "10978"

В JavaScript оператор + используется как для числового сложения, так и для конкатенации строк. Когда вы "добавляете" число в строку, интерпретатор преобразует ваш номер в строку и объединяет обе вместе.

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

Когда вы затем добавляете строку "8", конкатенация строк происходит снова. Число 1097 преобразуется в строку "1097", а затем соединяется с "8".

Ответ 2

строка + номер= конкатенированная строка

число + число= сумма обоих чисел

строка - число= разница между (принудительная строка) и числом

Объяснение:

Если один или оба операнда являются строками, тогда плюс считается оператором конкатенации строк, а не добавлением чисел.

оператор минус всегда пытается преобразовать оба операнда в числа.

так:

"" + 1 + 10 + 2 = (string) "1102"    
"1102" - 5      = (number)  1097
1097 + "8"      = (string) "10798"

Ответ 3

  • Это строка не число - ""
  • Это строка не число - "1"
  • Это строка, а не число - "1" < + > "10" = "1" + "10" = "110" '
  • Это строка, а не число - "1" < + > "10" < + > "2" = "1" + "10" + "2" = "1102"
  • Это число, потому что нет путаницы в отношении оператора минус - 1102 - 5 = 1097
  • Это строка, а не число - "1097" < + > "8" = "1097" + "8" = "10978"

SNIPPET

document.getElementById("1").innerHTML = "";

document.getElementById("2").innerHTML = "" + 1;

document.getElementById("3").innerHTML = "" + 1 + 10;

document.getElementById("4").innerHTML = "" + 1 + 10 + 2

document.getElementById("5").innerHTML = "" + 1 + 10 + 2 - 5

document.getElementById("6").innerHTML = "" + 1 + 10 + 2 - 5 + "8";
<ol>
  <li id='1'></li>
  <li id='2'></li>
  <li id='3'></li>
  <li id='4'></li>
  <li id='5'></li>
  <li id='6'></li>
</ol>

Ответ 4

Этот сайт содержит полезную информацию.

JavaScript очень расслаблен относительно разницы между строками и числами.

...

Итак, если вы используете + для строки и числа, JavaScript будет делать номер строки для вас. Еще лучше, если вам это нужно, вы можете обрабатывать числа как строки или строки как числа.

И наоборот, если вы применяете математику к строке, JavaScript пытается сделайте это числом. Если строка не может быть интерпретирована как число (потому что в нем есть буквы), JavaScript дает NaN (Не номер).

Ответ 5

Хотя + и - могут иметь одинаковые Приоритет операторов, они не имеют одинаковых неявных правил преобразования.

Поскольку - всегда означает вычитание числа в JavaScript, использование - всегда будет неявно пытаться анализировать как левую, так и правую часть выражения как целое.

В этом случае, поскольку приоритет оператора один и тот же, а оценка слева направо, вы получаете ( "+ 1 + 10 + 2), используя + неявный tostring для конкатенации строк или строки" 1102 ". Затем - будет неявно пытаться проанализировать строку" 1102 "на число, а также число 5, что приводит к 1102-5 или числу 1097. В этот момент строка" 8 "неявно конкатенируется используя +, и можно увидеть конечный результат: строка" 10978".

Возможно, интересной альтернативой было бы "+ 1 + 10 + 2-5 + 8, которое было бы 1097 + 8 или число 1105.