Programing

개체 속성 이름으로 템플릿 문자열

lottogame 2020. 12. 26. 09:27
반응형

개체 속성 이름으로 템플릿 문자열


JavaScript가 템플릿 문자열을 객체 속성 키로 허용하지 않는 이유는 무엇입니까? 예를 들어 다음을 입력 할 때 :

foo = {`bar`: 'baz'}

NodeJS REPL SyntaxError에 긴 스택 추적이 포함 된 "예기치 않은 템플릿 문자열"을 던집니다 . 그러나 속성 값은 괜찮지 만 예상치 못한 것은 아닙니다. 브라우저에서 유사한 오류가 발생합니다. 예를 들어 Firebug는 SyntaxError"유효하지 않은 속성 ID"와 함께 a 를 발생시킵니다.

"계산 된 속성 이름"에는 템플릿 문자열이 허용됩니다. 예를 들어, 이것은 구문을 지원하는 모든 브라우저에서 완벽하게 잘 컴파일됩니다.

var foo = {
    [`bar` + 1]: `baz`
};

그리고 객체를 만듭니다 {"bar1": "baz"}.

템플릿 문자열이 리터럴 객체 키로 허용되지 않는 이유는 무엇입니까? 성능상의 이유입니까? 템플릿 문자열은 런타임에 컴파일되어야합니다 (틀린 경우 수정). 즉,이 객체를 만날 때마다 인터프리터가 객체 이름을 계산해야합니다. "조리 된"템플릿 문자열과 같은 것들을 고려하면 ES5 이후로 게터와 세터가 있었지만 느려질 수있는 것처럼 보입니다. Firefox는 이것을 오류로 언급하지 않았기 때문에 예상치 못한 것으로 나타났습니다. 구문이 향후 언젠가 허용됩니까?


템플릿 문자열이 리터럴 객체 키로 허용되지 않는 이유는 무엇입니까?

템플릿 문자열은 리터럴이 아닌 표현식입니다 1 . 속성 이름에는 문자열 리터럴 (및 식별자) 만 사용할 수 있으며, 그 밖의 모든 경우 (정적이라고 알려지지 않은) 계산 된 속성 이름이 필요합니다.

성능상의 이유입니까?

아니요, 그럴 것 같지 않습니다. 구문 분석을 용이하게하고 상수 (정적으로 알려진) 속성 이름을 동적으로 계산 된 속성 이름과 쉽게 구별 할 수 있습니다.

그리고 대부분은 아무도 필요로하지 않는 기능입니다. 그것은 무엇이든 단순화하거나 단축하지 않으며, 그것으로 달성 할 수있는 것은 이미 가능합니다.

구문이 향후 언젠가 허용됩니까?

아니.

1 : "템플릿 리터럴"이라고하더라도 기술적으로는 리터럴 이 아닙니다 . 그리고 템플릿은 문자열이 아니어도되고 무엇이든 평가할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/33194138/template-string-as-object-property-name

반응형