サーチ…


前書き

特定の単語、いわゆるキーワードは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 5intbytechargotolongfinalfloatshortdoublenativethrowsbooleanabstractvolatiletransient 、およびsynchronized削除しました。 letyield追加letれました。

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

厳密なモードでのみimplementsletprivatepublicinterfacepackageprotectedstatic 、およびyield許可されません

evalargumentsは予約語ではありませんが、 strictモードではそのように動作します


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 `static '
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 Developer Networkから

識別子と識別子の名前

予約語に関しては、変数名または関数名のようなものに使用される「識別子」と複合データ型のプロパティとして許可される「識別子名」との間には小さな区別があります。

たとえば、次のようにすると構文エラーが発生します。

var break = true;

キャッチされないSyntaxError:予期しないトークンブレーク

ただし、名前はオブジェクトのプロパティとして有効とみなされます(ECMAScript 5以降)。

var obj = {
    break: true
};
console.log(obj.break);

この回答を引用するには:

ECMAScript®5.1言語仕様から

セクション7.6

識別子名は、Unicode標準の第5章の「識別子」セクションで与えられた文法に従って解釈されるトークンであり、若干の変更が加えられている。 IdentifierReservedWordではないIdentifierNameです( 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節)は、 IdentifierNameReservedWordであり、 オブジェクトイニシャライザの仕様からなることを示しています

11.1.5項

構文

ObjectLiteral :
  { }
  { PropertyNameAndValueList }
  { PropertyNameAndValueList , }

PropertyNameが指定されている場所:

PropertyName :
  IdentifierName
  StringLiteral
  NumericLiteral

あなたが見ることができるように、 PropertyNameかもしれIdentifierNameので可能、 ReservedWord sがあることをPropertyName秒。それは決定的仕様で 、持つことを許される、ということを教えてくれるReservedWordのようなclassvarなどPropertyNameの単なる文字列リテラルや数値リテラルのように引用符で囲まれていないが。

詳細は、 7.6節 「識別子の名前と識別子」を参照してください。


注:この例の構文ハイライトは、予約語を検出して、強調表示しています。この例は有効ですが、Javascriptの開発者は、そうでないと主張するいくつかのコンパイラ/トランスパイライザ、linter、minifierのツールによってキャッチされる可能性があります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow