Поиск…


Вступление

Некоторые слова - так называемые ключевые слова - рассматриваются специально в JavaScript. Существует множество различных ключевых слов, и они изменились в разных версиях языка.

Зарезервированные ключевые слова

JavaScript имеет предопределенный набор зарезервированных ключевых слов, которые нельзя использовать в качестве переменных, ярлыков или имен функций.

ECMAScript 1

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 дополнительных зарезервированных ключевых слова. (Новые добавления выделены жирным шрифтом).

3 E4X
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, которые утверждают иначе.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow