Почему 1 + + "1" === 2; + "1" + + "1" === 2 и "1" + "1" === "11" в javascript
Оператор добавления до char в javascript преобразует их в число?
1 + + "1" === 2;
+"1" + + "1" === 2;
"1" + "1" === "11"
Ранее question не объясняет, почему это происходит, только говорит нам о различных способах преобразования строк в число и наоборот.
Ответы
Ответ 1
1 + + "1" === 2;
Унарный оператор +
имеет более высокий приоритет, поэтому сначала оценивается +"1"
, преобразуя "1"
в целое число из 1, поэтому он станет
1+1 === 2
Вторая строка
+"1" + + "1" === 2;
Это похоже. Унарный оператор +
имеет более высокий приоритет, поэтому обе +"1"
будут вычисляться на положительное целочисленное значение 1.
"1" + "1" === "11"
Потому что в JavaScript +
также является оператором конкатенации строк, если оба операнда являются строками, это приведет к обеим строкам.
Дополнительная информация
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators
Обновление: @torazaburo - это правильно.
-
Оценка +"1"
в коде здесь не имеет ничего общего с приоритетом оператора.
-
Конкатенация строк произойдет, если любой из операндов является строкой.
Ответ 2
Что вы ищете, это унарный плюс. Давайте проанализируем первые 2 случая:
Оператор унарного плюса предшествует своему операнду и вычисляет его операнд, но пытается преобразовать его в число, если оно еще не было.
1 + + "1" === 2
+ "1"
part преобразует строку "1"
в число 1
. Затем число 1 добавляется к другому номеру 1, что приводит к 2 === 2
+ "1" + + "1" === 2
То же, что и выше, но вместо этого теперь есть две унарные операции. Поэтому обе строки "1"
преобразуются в число 1, что приводит к 2 === 2
Ответ 3
В JS существует неявное принуждение типа. Например, двоичный плюс оператор принуждает число в строку, если другой операнд является строкой. "1" + 2 === "12"
или 3 + "4" === "34"
.
Однако, если используется с одним операндом, он работает в обратном порядке, а +"1"
принуждает строку "1"
к числу 1
. Также как parseInt("1")
.
So +"1" + 3 === 4
Ответ 4
Оператор A +
или -
в javascript, который появляется перед строкой, преобразовывает его в Integer, в основном как parseInt()
. Это по дизайну.
Например: + "456" + 4 === 460
всегда возвращает true
. Если вы пропустите этот знак +
впереди, тем не менее, будет выполняться конкатенация строк, и вы получите 4564
.
Это также объясняет вашу третью строку кода.
Ответ 5
Первые 2, вы набираете число с помощью префикса +
.
Последний из них просто конкат из 2 строк, по умолчанию js будет запускаться,
и он будет выдавать число в строку в 1 + "1" === "11"