Число и строка
Значения бывают разными по природе, и язык их различает. Пять типов покрывают почти всё, что встречается в работе.
Число. Целое и дробное — один тип, отдельного «целого» в JavaScript нет.
let цена = 1200;
let доля = 0.25;
let температура = -7;
Дробная часть отделяется точкой, а не запятой: запятая в языке разделяет значения. 1,5 будет понято как два числа подряд, и почти всегда это ошибка.
Строка. Любой текст в кавычках. Кавычки бывают трёх видов, и первые два равноправны:
let имя = "Аня";
let город = 'Москва';
let привет = `Привет, Аня`;
Двойные и одинарные различаются только вкусом автора: берут те, которых нет внутри текста. Третьи — «обратные» — умеют кое-что ещё, и о них следующая глава.
let имя = "Аня";
let лет = 30;
console.log(имя, лет);
console.log(typeof имя, typeof лет);Аня 30 string number
typeof показывает тип значения. Пользуются им редко, но он незаменим, когда непонятно, почему программа ведёт себя странно.
Остальные три типа проще. Булево — это true или false, «да» или «нет»; из него состоят все условия, и следующие уроки будут про него. undefined означает «значения не задавали»: так выглядит переменная, объявленная без присваивания. null означает «пусто нарочно» — его кладёт человек, а не язык.
Разница между последними двумя тонкая, но полезная: undefined обычно говорит «сюда не добрались», а null — «сюда добрались и решили, что здесь ничего нет».
Шаблонные строки
Собирать текст из кусков через запятую в console.log удобно, а вот класть такой текст в переменную — уже нет:
let имя = "Аня";
let лет = 30;
let строка = "Меня зовут " + имя + ", мне " + лет + " лет";
Плюс здесь склеивает строки, и это работает — но читается тяжело: попробуйте с первого раза заметить, что пробелы расставлены верно.
Для этого есть обратные кавычки и подстановка:
let строка = `Меня зовут ${имя}, мне ${лет} лет`;
Внутри ${…} может стоять любое выражение — оно посчитается и вставится:
let цена = 1200;
console.log(`Цена: ${цена} ₽, со скидкой ${цена * 0.8} ₽`);Цена: 1200 ₽, со скидкой 960 ₽
Второе умение обратных кавычек: строка может занимать несколько строк.
console.log(`Первая
Вторая`);Первая Вторая
В обычных кавычках так нельзя — там перевод строки пишется знаком \n.
Приведение типов
Теперь главная странность языка, из-за которой он попадает в подборки «вот почему JavaScript смешной».
console.log(1 + 1);
console.log("1" + 1);
console.log("5" - 2);2 11 3
Правило на самом деле простое, и его стоит выучить дословно:
Плюс: если хотя бы одна сторона — строка, плюс склеивает. Иначе складывает.
Все остальные операторы — минус, умножение, деление — сначала приводят к числу.
Отсюда и «11», и «3». Плюс единственный, у кого два значения, — он и путает.
Строку превращают в число явно:
let введено = "10";
console.log(Number(введено) + 5);
console.log(введено + 5);15 105
Number(…) — «преврати в число». Если превратить нельзя, получится NaN — «не число»:
console.log(Number("абв"));
console.log(Number(""));NaN 0
Обратите внимание на пустую строку: она превращается в ноль, а не в NaN. Это одна из тех мелочей, которые ловят на собеседованиях и в реальных ошибках одинаково часто.