Поиск…
Вступление
Зарезервированные ключевые слова
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, которые утверждают иначе.