수색…


소개

특정 단어 - 소위 키워드 -는 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 5int , byte , char , goto , long , final , float , short , double , native , throws , boolean , abstract , volatile , transientsynchronized . 그것은 letyield 더했다.

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 , staticyield 엄격 모드에서만 허용된다.

evalarguments 는 예약어가 아니지만 엄격 모드 에서와 같이 작동 합니다 .


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;

잡히지 않은 SyntaxError : 예기치 않은 토큰 중단

그러나 이름은 객체의 속성으로 간주됩니다 (ECMAScript 5+ 기준).

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

이 대답 에서 인용 :

ECMAScript® 5.1 언어 사양 :

섹션 7.6

식별자 이름은 유니 코드 표준의 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 들로 PropertyName 들. 결론적 으로 스펙에 따르면, classvar 와 같은 ReservedWord 는 문자열 리터럴이나 숫자 리터럴처럼 인용 부호없는 PropertyName 처럼 사용할 수 있습니다.

자세한 내용 은 7.6 절 - 식별자 이름과 식별자를 참조하십시오.


참고 : 이 예제의 구문 형광펜은 예약어를 발견하고 여전히 강조 표시했습니다. 예제가 유효하지만 Javascript 개발자는 달리 주장하는 컴파일러 / 변환기, linter 및 minifier 도구에 의해 잡힐 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow