Spec-Zone.ru › JavaScript

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"

Для получения дополнительной информации см. Деструктуризация.

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-let-and-const-declarations

Совместимость с браузерами

Настольные Мобильные Сервер
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 13 const был реализован, но переприсваивание не вызывало ошибок.
До Firefox 46 при повторном объявлении вместо SyntaxError возникал TypeError.
9
5.1
25
36До Firefox for Android 14 const был реализован, но переприсваивание не вызывало ошибок.
До Firefox for Android 46 при повторном объявлении вместо SyntaxError возникал TypeError.
10.1
5
1.5
4.4
5
1.0.0
1.0
6.0.0

См. также

  • var
  • let
  • Константы в руководстве по JavaScript

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API