Разберем пример:
var a = 5; //число
var b = "5"; //строка
var c = a + b;
alert(c);//выведет 55
alert(typeof(c))// выведет string
Когда мы складываем 5
и 5
, то ожидаем увидеть вывод — 10
. Однако, получаем 55
и видим, что тип данных — не число, а строка.
Язык JavaScript автоматически преобразовал переменную a
в строку и соединил ее с переменной b
в одну строку.
Чтобы тип данных был ожидаем для разработчика, используют функции преобразования. Рассмотрим их подробно.
Преобразование в строку в JavaScript
Чтобы преобразовать число в строку используют функцию String()
.
Например:
var a = 5; //число
a = String(a);//преобразует переменную а в строку
alert(typeof(a));//выведет string
Преобразование в число в JavaScript
Чтобы преобразовать данные в число используют функцию Number()
. Попробуем преобразовать строковое значение 5
в число.
var a = "5";//строка
a = Number(a); //преобразует переменную а в число
alert(typeof(a));//выведет number
Если вы будете использовать в математических выражениях строки, то JavaScript автоматически преобразует переменные в числа.
Например:
var a = "5"; //строка
var b = "5"; //строка
var c = a/b;
alert(c);//выведет 1, что мы и ожидаем при делении 5 на 5
alert(typeof(c));// выведет number
Логическое преобразование в JavaScript
Для логического преобразования используют функцию Boolean()
.
Данные типа пустая строка
, NaN
, undefined
, null
— преобразуются в false
.
Все остальные данные: числа и строки, преобразуются в true
.
Например:
var a = "null";
alert(Boolean(a));//выведет false
var a = "0";
alert(Boolean(a));//выведет true
var a = " ";//пробел
alert(Boolean(a));//выведет true
var a = "";//пусто, без пробелов и других знаков
alert(Boolean(a));//выведет false
Подведем итоги
JavaScript может преобразовывать данные автоматически:
- число преобразуются в строки, если их использовать в выражениях со строкой;
- если в строках находятся числа и с ними выполняют математические операции, то они преобразуются в числа.
Для преобразования используют функции:
String()
— преобразует данные в строки.Number()
— преобразует данные в числа.Boolean()
— преобразует данные в логические значения true или false.
Комментарии
В это статье описывают только "симптомы" поведения. по настоящему если хотите узнать почему 1+"1"="11" то узнайте про:
А ещё можете почитать про JsFuck Она покажет на реальных примерах приведение типа. Для примера: Как только с помощью таких символах как []()!+ Получить строку со значением 'e'?
Ответ: (!![]+[])([!+[]+!+[]+!+[]])
Объяснение: Разберемся с первой группой (скобки) Начнем с пустого массива. Если вызвать пустой массив то логично получим этот пустой массив. Но что будет если попробовать использовать унарный оператор НЕ (!)? выведет false. Почему? Потому что при попытке приведения Exotic Object Array в Boolean type мы получаем true. А унарный оператор "разворачивает" вычисленное значение. и поэтому делаем еще один ! чтобы получить true.
Следующее: Почему потом !![] (как мы уже выяснили это true) это все снова прибавляется к массиву. При попытке Boolean прибавить Exotic Object Array неимеющим свойтсв срабатывает специальный метод прописанный в js и который описан в актуальной спецификации (как и все что я здесь говорю) и который в итоге возвращает пустую строку "". В итоге: true+""="true". Все это нужно было для того чтобы получить строку со значением "true" чтобы потом получить уже по индексу только строку со значением e.
Сокращая мы можем сделать так: (!![]+[])[3] Но нам нельзя использовать числа, так что надо сделать по другому. Зная что мы можем получить true то несложно предположить что 1 это true а 0 это false. И как же получить 1? надо использовать оператор "присвоения" (в спецификации он описан как Addiction expression если не ошибаюсь) То есть делаем: +(!![]) В итоге получается 1 а 1+1+1=3 так что надо просто повторить его 3 раза и получим строку со значением e
в подведении итогов перепутали какая функция преобразует в строку, а какая в число
В первом примере кода С пропущено. var C должно быть.
Да и что за вар в наши дни.
согласен, но есть моменты, когда так нужно сделать. Например, я решал задачу на Яндекс практикуме про видимость переменных в функциях. Задача оказалась тривиальной: нужно было заменить let на var. Как оказалось, это работает. Но в целом, да, от var уйти пора
var не устарел, у него свои области применения. для примера почему var лучше в некоторых ситуациях:
Можно также упомянуть, что преобразовать значение в строку добавив пустую строку(1+""), а в число с помощью унарного + (+"1")