Урок 2. Переменные let и const, типы данных
Переменная — именованное место для значения. Программа кладёт туда число, текст или что-то сложнее, а потом обращается к значению по имени. В современном JavaScript переменные объявляют словами let и const.
let и const
let age = 16;
const name = "Аня";
console.log(name, age);
age = 17;
console.log(name, age);Аня 16
Аня 17let— переменная, значение которой можно менять:age = 17записывает новое значение на место старого.const— константа: значение задаётся один раз, при объявлении, и больше не меняется.
Попытка изменить const — ошибка. Здесь она перехвачена конструкцией try … catch, чтобы программа не остановилась и вывела текст ошибки (подробнее о try — в уроке Асинхронность):
const pi = 3.14;
try {
pi = 3;
} catch (err) {
console.log(err.name + ": " + err.message);
}TypeError: Assignment to constant variable.Какое слово выбрать? Правило простое: по умолчанию — const, а let — только если значение действительно будет меняться (счётчик, сумма, текущее состояние). Так читателю кода сразу видно, какие значения постоянны.
Ещё есть старое слово var. Оно работает, но ведёт себя неочевидно, и в новом коде его не пишут. Чем оно отличается — в справке Чем отличаются var, let и const.
Объявить переменную можно и без значения: let total; — до первого присваивания в ней лежит undefined. У const значение обязательно сразу.
Имена переменных
- Имя состоит из букв, цифр,
_и$и не начинается с цифры:count,user2,_temp. - Большие и маленькие буквы различаются:
ageиAge— две разные переменные. - Нельзя брать слова самого языка:
let,const,if,for,function,returnи другие. - Имя из нескольких слов пишут слитно, каждое следующее слово с большой буквы:
totalPrice,isLoggedIn. Это называется camelCase.
Русские буквы в именах технически разрешены, но так не пишут: имена переменных — латиницей, по-английски и по смыслу: price понятнее, чем x или транслит cena.
Типы данных
У каждого значения есть тип — что это за значение и что с ним можно делать. В JavaScript восемь типов.
| Тип | Что это | Примеры |
|---|---|---|
number | число, целое или дробное | 42, 3.14, -7 |
string | строка, текст | "привет", 'JS' |
boolean | логическое значение | true, false |
undefined | значение не задано | undefined |
null | «пусто», задано нарочно | null |
bigint | очень большое целое | 12345678901234567890n |
symbol | уникальный идентификатор | Symbol("id") |
object | объект: набор значений | { name: "Аня" }, [1, 2, 3] |
Первые семь называют простыми (примитивами): это одно значение. Объекты — составные: в них много значений под разными именами. Массивы и функции — тоже объекты, им отведены отдельные уроки.
Тип значения показывает оператор typeof:
console.log(typeof 42);
console.log(typeof 3.14);
console.log(typeof "текст");
console.log(typeof true);
console.log(typeof undefined);
console.log(typeof null);
console.log(typeof [1, 2, 3]);
console.log(typeof { a: 1 });number
number
string
boolean
undefined
object
object
objecttypeof null даёт "object" — это давняя ошибка языка, оставленная ради совместимости со старыми сайтами. null — не объект, а отдельный тип. Массив typeof тоже называет объектом; проверить, что значение — массив, можно так: Array.isArray(значение).
Числа
Целые и дробные числа в JavaScript — один тип number. Дробная часть отделяется точкой, не запятой: 3.14.
console.log(10 / 4);
console.log(0.1 + 0.2);
console.log(1 / 0);
console.log("abc" * 2);2.5
0.30000000000000004
Infinity
NaN0.1 + 0.2даёт не ровно0.3: дробные числа хранятся в двоичном виде, и часть дробей записывается с крошечной погрешностью. Так устроены числа почти во всех языках. Для вывода число округляют — см. справку Как округлить число.- Деление на ноль не ошибка: результат —
Infinity, бесконечность. NaN(Not a Number, «не число») — результат действия, которое не дало числа. Как ни странно,typeof NaN— тоже"number".
Целые числа точны до 9007199254740991 (это Number.MAX_SAFE_INTEGER). Для больших целых есть тип bigint: к числу дописывают букву n.
Строки
Строку берут в двойные "…" или одинарные '…' кавычки — разницы между ними нет, главное, чтобы строка закрывалась той же кавычкой, что открылась. Третий вид — обратные кавычки (на клавиатуре — клавиша с буквой Ё в английской раскладке). Строка в них называется шаблонной: внутрь можно вставить значение через ${…}.
const name = "Олег";
const items = 3;
const price = 2.5;
console.log("Покупатель: " + name);
console.log(`${name} купил ${items} шт. на ${items * price} руб.`);
console.log(name.length);
console.log(name.toUpperCase());Покупатель: Олег
Олег купил 3 шт. на 7.5 руб.
4
ОЛЕГ+между строками склеивает их.- В
${…}можно писать любое выражение:items * priceвычисляется и вставляется в строку. name.length— длина строки в символах,toUpperCase()— та же строка большими буквами.
Шаблонные строки удобнее склейки через +, когда в тексте несколько значений: меньше кавычек и пробелов, которые легко забыть.
Тип меняется вместе со значением
Переменная в JavaScript не привязана к типу: в let можно положить число, а потом строку. Язык это позволяет, но такой код трудно читать: от переменной с одним именем ждут значений одного вида. Держите в переменной значения одного типа.
Коротко
const— по умолчанию,let— когда значение меняется;varв новом коде не пишут.- Имена — латиницей, в camelCase, с учётом регистра букв.
- Типы:
number,string,boolean,undefined,null,bigint,symbol,object; узнать тип —typeof. - Дробные числа пишутся через точку и бывают неточны:
0.1 + 0.2≠0.3. - Шаблонная строка — в обратных кавычках, значение вставляется в неё через
${…}.