Поиск…
Вступление
Зарезервированные ключевые слова
JavaScript имеет предопределенный набор зарезервированных ключевых слов, которые нельзя использовать в качестве переменных, ярлыков или имен функций.
ECMAScript 1
A - E | E - R | S - Z |
---|---|---|
break | export | super |
case | extends | switch |
catch | false | this |
class | finally | throw |
const | for | true |
continue | function | try |
debugger | if | typeof |
default | import | var |
delete | in | void |
do | new | while |
else | null | with |
enum | return |
ECMAScript 2
Добавлено 24 дополнительных зарезервированных ключевых слова. (Новые добавления выделены жирным шрифтом).
A - F | F - P | P - Z |
---|---|---|
abstract | final | public |
boolean | finally | return |
break | float | short |
byte | for | static |
case | function | super |
catch | goto | switch |
char | if | synchronized |
class | implements | this |
const | import | throw |
continue | in | throws |
debugger | instanceof | transient |
default | int | true |
delete | interface | try |
do | long | typeof |
double | native | var |
else | new | void |
enum | null | volatile |
export | package | while |
extends | private | with |
false | protected |
ECMAScript 5 / 5.1
С ECMAScript 3 изменений не было .
ECMAScript 5 удалял int
, byte
, char
, goto
, long
, final
, float
, short
, double
, native
, throws
, boolean
, abstract
, volatile
, transient
и synchronized
; он добавил let
и yield
.
A - F | F - P | P - Z |
---|---|---|
break | finally | public |
case | for | return |
catch | function | static |
class | if | super |
const | implements | switch |
continue | import | this |
debugger | in | throw |
default | instanceof | true |
delete | interface | try |
do | let | typeof |
else | new | var |
enum | null | void |
export | package | while |
extends | private | with |
false | protected | yield |
implements
,let
,private
,public
,interface
,package
,protected
,static
иyield
запрещены только в строгом режиме .
eval
иarguments
- это не зарезервированные слова, но они действуют как в строгом режиме .
ECMAScript 6 / ECMAScript 2015
A - E | E - R | S - Z |
---|---|---|
break | export | super |
case | extends | switch |
catch | finally | this |
class | for | throw |
const | function | try |
continue | if | typeof |
debugger | import | var |
default | in | void |
delete | instanceof | while |
do | new | with |
else | return | yield |
Будущие зарезервированные ключевые слова
Следующие спецификации зарезервированы как будущие ключевые слова по спецификации ECMAScript. В настоящее время у них нет специальных функций, но они могут появиться в будущем, поэтому их нельзя использовать в качестве идентификаторов.
enum |
Следующие зарезервированы только в том случае, если они находятся в строгом режиме:
implements | package | public |
interface | private | `Статическими» |
let | protected |
Будущие зарезервированные ключевые слова в старых стандартах
Следующие зарезервированы как будущие ключевые слова по более старым спецификациям ECMAScript (ECMAScript 1 до 3).
abstract | float | short |
boolean | goto | synchronized |
byte | instanceof | throws |
char | int | transient |
double | long | volatile |
final | native |
Кроме того, литералы null, true и false не могут использоваться в качестве идентификаторов в ECMAScript.
Из сети разработчиков Mozilla .
Идентификаторы и Имена Имена
Что касается зарезервированных слов, то существуют небольшие различия между «Идентификаторами», используемыми для имен переменных или функций, а «Идентификационные имена» разрешены как свойства составных типов данных.
Например, следующее приведет к нелегальной синтаксической ошибке:
var break = true;
Uncaught SyntaxError: Неожиданный разрыв токена
Однако имя считается действительным как свойство объекта (как в ECMAScript 5+):
var obj = {
break: true
};
console.log(obj.break);
Процитировать из этого ответа :
Из спецификации языка ECMAScript® 5.1 :
Раздел 7.6
Идентификационные имена - это токены, которые интерпретируются в соответствии с грамматикой, указанной в разделе «Идентификаторы» главы 5 стандарта Unicode, с небольшими изменениями.
Identifier
- этоIdentifierName
который не являетсяReservedWord
(см. 7.6.1 ).
Синтаксис
Identifier :: IdentifierName but not ReservedWord
По спецификации ReservedWord
:
Раздел 7.6.1
Зарезервированное слово - это имя
IdentifierName
которое не может использоваться какIdentifier
.ReservedWord :: Keyword FutureReservedWord NullLiteral BooleanLiteral
Сюда входят ключевые слова, будущие ключевые слова, null
и булевские литералы. Полный список ключевых слов приведен в разделах 7.6.1, а литералы - в Разделе 7.8 .
Вышеизложенное (раздел 7.6) подразумевает, что имя IdentifierName
s может быть ReservedWord
s и из спецификации для инициализаторов объектов :
Раздел 11.1.5
Синтаксис
ObjectLiteral : { } { PropertyNameAndValueList } { PropertyNameAndValueList , }
Где PropertyName
по спецификации:
PropertyName : IdentifierName StringLiteral NumericLiteral
Как вы можете видеть, PropertyName
может быть именем IdentifierName
, что позволяет ReservedWord
s быть PropertyName
s. Это окончательно говорит нам, что по спецификации разрешено иметь ReservedWord
s, такие как class
и var
поскольку PropertyName
s не кавычки, как строковые литералы или числовые литералы.
Подробнее читайте в разделе 7.6 « Имена и идентификаторы идентификаторов».
Примечание: синтаксический маркер в этом примере обнаружил зарезервированное слово и по-прежнему выделял его. Хотя пример действителен, разработчики Javascript могут быть пойманы некоторыми инструментами компилятора / транспилятора, linter и minifier, которые утверждают иначе.