const
Baseline Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2016 года.
Объявление const объявляет локальные переменные, ограниченные блоком. Значение константы не может быть изменено путем переприсваивания с использованием оператора присваивания, но если константа является объектом, ее свойства могут быть добавлены, обновлены или удалены.
Попробуйте
const number = 42;
try {
number = 99;
} catch (err) {
console.log(err);
// Expected output: TypeError: invalid assignment to const 'number'
// (Note: the exact output may be browser-dependent)
}
console.log(number);
// Expected output: 42
Синтаксис
const name1 = value1; const name1 = value1, name2 = value2; const name1 = value1, name2 = value2, /* …, */ nameN = valueN;
-
nameN - Имя переменной для объявления. Каждое из них должно быть допустимым идентификатором JavaScript или привязкой деструктуризации.
-
valueN - Начальное значение переменной. Это может быть любое допустимое выражение.
Описание
Объявление const очень похоже на let:
-
Объявления
constимеют область видимости как для блоков, так и для функций. -
К объявлениям
constможно получить доступ только после достижения места объявления (см. временную мертвую зону). По этой причине объявленияconstобычно считаются не поднятыми. -
Объявления
constне создают свойства вglobalThisпри объявлении на верхнем уровне скрипта. -
Объявления
constне могут быть переобъявлены любым другим объявлением в той же области видимости. -
constначинаются с объявлений, а не инструкций. Это означает, что вы не можете использовать одиночное объявлениеconstв качестве тела блока (что имеет смысл, поскольку нет способа получить доступ к переменной).if (true) const a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
Инициализатор для константы обязателен. Вы должны указать его значение в том же объявлении. (Это имеет смысл, учитывая, что его нельзя изменить позже.)
const FOO; // SyntaxError: Missing initializer in const declaration
Объявление const создает неизменяемую ссылку на значение. Это не означает, что значение, которое оно содержит, является неизменяемым — просто идентификатор переменной не может быть переназначен. Например, в случае, когда содержимое является объектом, это означает, что содержимое объекта (например, его свойства) может быть изменено. Вы должны понимать объявления const как "создать переменную, идентичность которой остается постоянной", а не "чье значение остается постоянным" — или "создать неизменяемые привязки", а не "неизменяемые значения".
Многие руководства по стилю (включая руководство MDN) рекомендуют использовать const вместо let, когда переменная не переназначается в своей области видимости. Это делает намерение ясным, что тип переменной (или значение, в случае примитива) никогда не может измениться. Другие могут предпочитать let для непримитивных типов, которые мутируют.
Список, следующий за ключевым словом const, называется списком привязок и разделен запятыми, где запятые не являются операторами запятой, а знаки = не являются операторами присваивания. Инициализаторы последующих переменных могут ссылаться на предыдущие переменные в списке.
Примеры
Основное использование const
Константы могут быть объявлены в верхнем или нижнем регистре, но распространенным соглашением является использование только заглавных букв, особенно для примитивов, поскольку они действительно неизменяемы.
// define MY_FAV as a constant and give it the value 7
const MY_FAV = 7;
console.log(`my favorite number is: ${MY_FAV}`);
// Re-assigning to a constant variable throws an error MY_FAV = 20; // TypeError: Assignment to constant variable // Redeclaring a constant throws an error const MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declared var MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declared let MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declared
Блочная область видимости
Важно отметить природу блочной области видимости.
const MY_FAV = 7;
if (MY_FAV === 7) {
// This is fine because it's in a new block scope
const MY_FAV = 20;
console.log(MY_FAV); // 20
// var declarations are not scoped to blocks so this throws an error
var MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declared
}
console.log(MY_FAV); // 7
const в объектах и массивах
const также работает с объектами и массивами. Попытка перезаписать объект вызывает ошибку "Assignment to constant variable".
const MY_OBJECT = { key: "value" };
MY_OBJECT = { OTHER_KEY: "value" };
Однако ключи объекта не защищены, поэтому следующее утверждение выполняется без проблем.
MY_OBJECT.key = "otherValue";
Для того чтобы сделать объект неизменяемым, вам потребуется использовать Object.freeze().
То же самое относится и к массивам. Присваивание нового массива переменной вызывает ошибку "Assignment to constant variable".
const MY_ARRAY = []; MY_ARRAY = ["B"];
Тем не менее, возможно добавить элементы в массив и, таким образом, изменить его.
MY_ARRAY.push("A"); // ["A"]
Объявление с деструктуризацией
Левая часть каждого = также может быть шаблоном привязки. Это позволяет создавать несколько переменных одновременно.
const result = /(a+)(b+)(c+)/.exec("aaabcc");
const [, a, b, c] = result;
console.log(a, b, c); // "aaa" "b" "cc"
Для получения дополнительной информации см. Деструктуризация.
Спецификации
Совместимость с браузерами
| Настольные | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
const |
21 |
12 |
36До Firefox 13const был реализован, но переприсваивание не вызывало ошибок.До Firefox 46 при повторном объявлении вместо SyntaxError возникал TypeError. |
9 |
5.1 |
25 |
36До Firefox for Android 14const был реализован, но переприсваивание не вызывало ошибок.До Firefox for Android 46 при повторном объявлении вместо SyntaxError возникал TypeError. |
10.1 |
5 |
1.5 |
4.4 |
5 |
1.0.0 |
1.0 |
6.0.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const