Примитивные типы
В коробках из прошлого урока лежат разные вещи, и обращаются с ними по-разному. Книгу читают, а яблоко едят. Со значениями в программе так же: два числа можно сложить, а два слова — приставить друг к другу, как «пар» и «ус» дают «парус».
Один и тот же знак + работает по-разному — смотря что стоит по его сторонам:
console.log(2 + 2); // 4
console.log("2" + "2"); // 22Давайте разберём обе строки:
2 + 2— два числа, и+складывает их: получается4;"2" + "2"— две строки, и+склеивает их в одну: получается22.
Значения 2 и "2" выглядят похоже, но относятся к разным видам, и от вида зависит, что с ними делает +.
Семь примитивных типов
Вид значения называется типом. В JavaScript семь примитивных типов — так называют типы простых значений, которые не состоят из других значений.
number— числа, целые и дробные:42,-7,3.14.string— строки, текст в кавычках:"Hi","2".boolean— логические значения, их всего два:trueиfalse.undefinedиnull— два значения со смыслом «значения нет».bigintиsymbol— очень большие целые числа и особые уникальные значения; в начале работы они почти не встречаются.
Строку можно записать и в одинарных кавычках, '2', но в этом курсе строки пишут в двойных.
Тип есть у значения
Тип принадлежит значению, а не переменной. Переменная, объявленная через let, может хранить сначала число, а после присваивания — строку.
Вернёмся к кладовке. Коробка let не сделана под одну вещь: сегодня в ней число, завтра строка. Тип узнают по тому, что лежит внутри, а не по самой коробке.
Оператор typeof
Знак или слово, которое вычисляет новое значение из стоящих рядом значений, называют оператором. И +, и typeof — операторы. Оператор typeof возвращает имя типа значения, записанное строкой.
console.log принимает несколько значений через запятую и печатает их рядом, через пробел:
const name = "Ann";
console.log(typeof 42, typeof name); // number string
console.log(typeof true, typeof undefined); // boolean undefined
console.log(typeof 3.14, typeof NaN); // number numberРазберём вывод по строкам:
typeof 42даётnumber. Дляtypeof nameJavaScript смотрит на значение в переменной,"Ann", и даётstring.true— этоboolean, а уundefinedтип называется так же, как само значение.- И
3.14, иNaNдаютnumber.
Последняя строка показывает две особенности:
- у дробных чисел нет своего типа:
3.14— тожеnumber; NaN(not a number) — особое значение типаnumberсо смыслом «не число».
Странность typeof null
Оператор typeof для null даёт неожиданный ответ:
console.log(typeof null); // objectЭто старая ошибка языка: null — примитивное значение, но typeof называет его "object". Так называется тип составных значений, а null к ним не относится. Исправить ошибку нельзя, не сломав уже написанные программы, поэтому ответ "object" для null нужно запомнить.
На собеседовании часто спрашивают, что вернёт typeof null. Правильный ответ — "object", и стоит добавить, что это давняя ошибка языка, а не настоящий тип null.
Частая ошибка
Строку написали без кавычек:
const greeting = hello; // ✗
console.log(greeting);ReferenceError: hello is not definedБез кавычек hello — это имя переменной. JavaScript ищет переменную с таким именем, не находит её и останавливает программу на этой строке. Значением типа string текст становится только в кавычках: const greeting = "hello";.
Главное
- Тип — вид значения; от типа зависит, что со значением делает оператор, например
+. - Примитивных типов семь:
number,string,boolean,undefined,null,bigintиsymbol. - Тип принадлежит значению, а не переменной: в
letможно положить сначала число, потом строку. typeofвозвращает имя типа строкой:typeof NaN— это"number", аtypeof null—"object".
Подпишись, чтобы пройти курс
Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.