JavaScript. Почему 3 + true = 4? И другие хитрые уравнения приведения типов
3 + true === 4
. Сейчас вы узнаете почему так происходит и ещё узнаете про 8 других интересных JavaScript уравнений.
Как лучше читать эту статью
Это может вас немного смутить, но вам надо делать так, как я напишу дальше. Вам придется открыть консоль разработчика в 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
, что означает, то что это не число.