Подписывайтесь на мой твиттер, там всегда что-нибудь интересное!

JavaScript. Почему 3 + true = 4? И другие хитрые уравнения приведения типов

3 + true === 4. Сейчас вы узнаете почему так происходит и ещё узнаете про 8 других интересных JavaScript уравнений.

Перевод статьи JavaScript: Why does 3 + true = 4? (and 7 other tricky equations)

Как лучше читать эту статью

Это может вас немного смутить, но вам надо делать так, как я напишу дальше. Вам придется открыть консоль разработчика в Chrome, нажав в Windows: Ctrl + Shift + J или в Mac Cmd + Option + J. Это даст вам возможность напечатать весь следующий код в браузере и вы сможете увидеть в реальном примере то, что происходит.

3 + true == 4

Я не шучу. В JavaScript, когда оператор + находится между числом и булевым значением, последний конвертируется в число.

В этих случаях и false == 0. Учитывая это, 3 + true конвертируется в 3 + 1 и следовательно мы получаем ответ 4.

True + False

Это следует такой же логике как в примере выше. Когда оператор + размещен между двумя булевыми значениями, они конвертируются в числа. Следовательно, true + false конвертируется в 1 + 0 и в итоге мы получаем ответ 1.

4’ + 8

Что случается когда мы добавляем число в строке к обычному числу? Когда оператор + находится между этими двумя операндами и один из них является строкой, это сконвертирует другое число или булево значение в строку и свяжет их.

Следуя этой логике, ‘4' + 8 становится '4' + '8' и мы получаем ответ '48'.

true + ‘4’

Так же как и в примере выше, JavaScript сконвертирует boolean в сточное значение и свяжет его. Это станет 'true' + '4' и результатом будет 'true4'.

1 + 1 + ‘1’

Порядок операций очень важен. В этом примере, JavaScript считает первый + перед чем либо ещё, что ведет к 1 + 1 = 2. Далее мы добавляем строчной значение '1'. Происходит связывание и как результат мы получаем '21'.

Вот цепочка событий:

1 + 1 + '1'
  2   + '1'
       '21'

1’ + 1 + 1

Что меняется, когда у нас есть строчное значение на первом месте? Помните о порядке операций и работайте слева на право.

'1' + 1 + 1
   '11' + 1
       '111'

string + number = string В этом случае у нас останется только одна длинная строка '111'.

-‘69’ + 69

Что если мы попытаемся инвертировать в минус строку и затем добавить число? Как вы должны знать к этому моменту, без минуса, наш ответ был бы ‘6969’. Тем не менее минус все меняет.

Знак минус перед ’69’ это унарный оператор минуса, который на самом деле сконвертирует строку в число и сделает его отрицательным. Следовательно, наше уравнение станет -69 + 69, что будет равно 0.

-‘giddyup’ + 409

Что если наш унарный оператор минуса будет перед строкой, которая не может быть сконвертирована в число? Когда JavaScript не может сделать число, мы остаемся только с NaN, что означает, то что это не число.