Эта статья нуждается в редакционном обзоре. Как вы можете помочь.
Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.
Это экспериментальная технология, часть предложения Harmony (ECMAScript 6).
Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.
Общая информация
const создаёт новую именованную константу, доступную только для чтения.
Синтаксис
const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
nameN
- Имя констаты. Подчиняется тем же правилам, что и имена обычных переменных.
valueN
- Значение константы. Может быть любым из тех типов, которыми могут быть переменные.
Описание
Эта синтаксическая конструкция создаёт новую константу. Имена констант подчиняются тем же правилам что и обычные переменные. Значение константы нельзя менять/перезаписывать. Также её нельзя объявить заново.
Примеры
Ниже описаны примеры, демонстрирующие поведение const. Попробуйте их выполнить в консоли разработчика своего браузера. В Firefox и Chrome вы получите следуещее поведение:
// определим my_fav как константу и присвоим ей значение 7 const my_fav = 7; // данное присваивание будет проигнорировано Firefox и Chrome (но не в Safari) my_fav = 20; // напечатает 7 console.log("my favorite number is: " + my_fav); // попробуем переопределить константу, будет выкинуто исключение или // просто проигнорировано (зависит от среды выполнения) const my_fav = 20; // имя my_fav зарезервированно константой выше, данная операция // выкинет исключение или будет проигнорированно var my_fav = 20; // my_fav все еще имеет значение 7 console.log("my favorite number is " + my_fav);
Многие браузеры уже сегодня поддерживают константы, но не все из них (в частности, Safari) работают с ними как с константами. То есть вы можете использовать константы, чтобы показать другим разработчикам, что вы создаете неизменяемую переменную, но в настоящее время вы не можете полагаться на корректное поведение браузеров.
Спецификация
Спецификация | Статус | Комментарий |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Определение 'Let and Const Declarations' в этой спецификации. |
Стандарт | Initial definition. |
Поддержка браузерами
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | ? | ? | 11 | 12.00 (maybe earlier) | 5.1.7 (maybe earlier) |
Reassignment fails |
20 | 13 (13) | ? | ? | ? |
Temporal dead zone | ? | 35 (35) | ? | ? | ? |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | ? | ? | ? | ? | ? | ? |
Reassignment fails | ? | ? | ? | ? | ? | ? |
Temporal dead zone | ? | ? | 35 (35) | ? | ? | ? |
Примечания
The current implementation of const
in Firefox is a Mozilla-specific extension and is not part of ECMAScript 5.
It is supported in Firefox & Chrome (V8). As of Safari 5.1.7 and Opera 12.00, if you define a variable with const
in these browsers, you can still change its value later. It is not supported in Internet Explorer 6-10, but is included in Internet Explorer 11.
The const
keyword currently declares the constant in the function scope (like variables declared with var
).
Firefox, at least since version 13, throws a TypeError
if you redeclare a constant. None of the major browsers produce any notices or errors if you assign another value to a constant. The return value of such an operation is that of the new value assigned, but the reassignment is unsuccessful only in Firefox 13 and Chrome (at least since version 20).
const
is defined in ECMAScript 6 (see above), but with different semantics. Similar to variables declared with the let
statement, constants declared with const
will be block-scoped, do not hoist, and throw a SyntaxError exception if code attempts to access the binding before it has been declared. This "temporal dead zone" for const
has been added in Firefox 35. A tracking bug for const
ES6 compliance is баг 950547.