Почему 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"