Переменные: var, let и const
Что хранит переменная и почему в новом коде выбирают let или const.
also in web development basics
Программа работает со значениями: именами, числами, ответами пользователя. Переменная связывает понятное имя со значением, чтобы код мог обратиться к нему позже.
const studentName = "Анна";
let score = 0;
score = score + 1;
console.log(studentName, score);Здесь studentName хранит имя, а score хранит результат, который меняется. const запрещает присвоить переменной новое значение. let разрешает.
Значения бывают разных видов
JavaScript различает типы значений. Число 20 можно умножить, а строку "20" можно соединить с другим текстом. Кавычки меняют смысл записи:
const age = 20; // number: число
const ageText = "20"; // string: строка
const hasAccess = true; // boolean: да или нет
console.log(age + 1); // 21
console.log(ageText + 1); // "201"Оператор typeof показывает тип значения. Пока используйте его, чтобы проверить, сохранилось ли в переменной число или строка:
console.log(typeof age); // "number"
console.log(typeof ageText); // "string"Если значение еще не задано, при чтении переменной можно получить undefined. Значение null разработчик обычно задает сам, когда хочет явно обозначить отсутствие данных. С остальными типами вы встретитесь позже; сейчас важно отличать числа, строки и логические значения и проверять, что именно лежит в переменной.
Давайте переменным говорящие имена: totalPrice помогает понять назначение числа, а x – только если смысл очевиден рядом с кодом. В именах из нескольких слов здесь используем camelCase: первое слово со строчной буквы, следующие начинаются с заглавной.
Чем отличаются var, let и const
Перед таблицей два термина. Область видимости - место в коде, где можно обратиться к переменной. Блок - группа команд внутри фигурных скобок { }.
| Объявление | Можно присвоить другое значение | Где доступно | Повторное объявление в той же области |
|---|---|---|---|
var | да | внутри функции или всего скрипта; обычный блок { } не ограничивает | разрешено |
let | да | только внутри блока { } | ошибка |
const | нет | только внутри блока { } | ошибка |
У var много свободы: переменную можно объявить повторно, и фигурные скобки обычного блока ее не ограничивают. Поэтому по расположению строки сложнее понять, где имя доступно, а повторное объявление может скрыть опечатку. Чем больше неявных правил приходится помнить, тем легче пропустить ошибку.
{
var message = "Объявление var видно после блока";
let note = "Объявление let осталось внутри блока";
}
console.log(message);
// console.log(note); // Ошибка: note вне блока недоступна.var объявлена внутри блока, но доступна после него. Точнее, var ограничена телом функции, если объявлена внутри функции. let и const ограничены ближайшим блоком { }. Если повторно объявить let score в той же области, JavaScript сообщит об ошибке; повторное объявление через var разрешено и может скрыть случайную опечатку.
Как выбирать
- Начинайте с
const: имя остается привязанным к одному значению. - Берите
let, если нужно позже присвоить переменной другое значение, например обновлять счетчик. varоставьте для чтения старого кода. В новых примерах курса его не используем.
const не замораживает объект или массив. Она запрещает заменить значение переменной, но содержимое объекта менять можно:
const student = { score: 0 };
student.score = 1; // Допустимо: изменили свойство объекта.
// student = {}; // Ошибка: пытаемся заменить значение const.JavaScript узнает тип значения во время выполнения. Позже TypeScript поможет заметить часть несовпадений еще до запуска. Справочник: переменные на MDN.