programing

예약된 단어를 속성 이름으로 사용, 다시 방문

magicmemo 2023. 4. 6. 21:30
반응형

예약된 단어를 속성 이름으로 사용, 다시 방문

예약된 단어를 객체의 속성 이름으로 사용할 수 있습니까?

이 문제는 이전 Stack Overflow 질문: JavaScript에서 예약된 단어를 속성 이름으로 사용하는 브라우저 지원에서 간접적으로 제기되었습니다.대답은 알렉스 웨인의 일반적인 의견일 것 같았다.

이러한 단어는 문자열로만 사용할 수 있으며 속기 속성은 사용할 수 없습니다.

foo['class']; // cool
foo.class;    // not cool

나는 그들이 이 분야에 대해 나보다 더 잘 알고 있고 경우에 따라서는 말을 아끼는 것은 좋지 않다고 생각하지만, 두 가지 점에서 그들의 결론은 틀렸다고 생각한다.

  • 예약어 테스트(예약어)를 "예약어" 속성으로 사용)

  • HTMLFormElement는 "shorthand"에서 예약어를 사용하지 않도록 합니다.

목록을 , 먼, 약, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, 각, first, first, first, first, first, first, first, first, first.Object ★★★★★★★★★★★★★★★★★」HTMLElement둘다 둘다 , , 다 , 。obj["word"] ★★★★★★★★★★★★★★★★★」obj.word를 취득했습니다.obj["word"] ★★★★★★★★★★★★★★★★★」obj.word63건의 경우 각각 8건의 테스트가 모두 올바르게 수행되었습니다.

둘째, HTMLFormElement는 속기 표기를 사용하여 요소를 가져오기 때문에 이 작업이 필요합니다. if<input name='typeof' value='scalar' />이고, 그 다음에, 「형식의 요소」입니다.form.typeof== "supervar".

제 경험상, 예약어는 보통 프로그램 실행이 아닌 데이터 실행(예: "프라이빗"이라는 컬럼)입니다.이와 같이 JSON 오브젝트를 오염시키고, 거기서부터의 입력과 HTMLFormElement를 오염시킵니다.간단히 말해서, 많은 양의 (IMHO가 불필요한) 작업이 없다면, 예약된 단어들이 속기에서 올바르게 작동하도록 강요되지 않는 것은 불가능하다.

제가 보기에 진짜 문제는 다음과 같습니다.

  • 예약어가 아닌 기존 속성과 충돌하지 않도록 주의해야 한다.

  • (전부는 아니더라도 많은) 변수는 예약어일 수 없습니다.

  • 특성으로서의 예비어의 사용은 혼란스러울 수 있다(그러나 반드시 그렇지는 않다)

그렇다면 이 결론은 약간의 상식이 상황에 적용된다면, 속성 이름으로 예약된 단어와 문자열 또는 속기로 접근해도 되는 것인가?

ECMAScript에서는 ES5부터 예약된 단어를 "in the buff" 객체 속성 이름으로 사용할 수 있습니다.즉, 오브젝트 리터럴을 정의할 때 따옴표로 "접속"할 필요가 없으며 각 괄호 색인 표기 없이 오브젝트에서 참조(접근, 할당 및 삭제)할 수 있습니다.

단, 예약된 단어는 여전히 식별자 이름으로 사용할 수 없습니다.이것은 사양에 명료하게 기재되어 있으며, 여기에 다소 강조적으로 기재되어 있습니다(실제 언어 사양을 읽어서 눈에 피를 흘리고 싶지 않은 경우).

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Reserved_Words

다음은 키워드입니다.ECMAScript는 키워드의 특별한 동작을 지정하기 때문에 변수, 함수, 메서드 또는 오브젝트 ID로 사용할 수 없습니다.

무슨 말을 하고 싶은지 잘 모르겠기 때문에 대답할 수 있는 것은 「네, 예약어를 속성명으로 사용하는 것은 괜찮습니다.」뿐입니다.

(단, 두 가지 작은 코멘트:foo["class"]괜찮다, 아니다foo[class]그리고 당신이 사용해야 할 방법은form.elements["xyz"]가 아니라form.xyz이름을 가진 요소에 접근하다xyz.)

네, 쓸 수 있어요.

주의사항입니다. YUI 컴프레서를 사용할 경우 js 예약어 중 하나와 동일한 속성 이름을 따옴표로 묶어야 합니다.

예를 들어, 이것은 압축되지 않습니다.

var a = { case : "foo"}; // syntax error, "invalid property id"
a.for = "bar"; // syntax error, "missing name after . operator"

이것으로 충분하다

var a = { "case" : "foo"}; //OK
a["for"] = "bar"; //OK

테스트 가능한 것은 온라인 JavaScript/CSS Compression Using YUI Compressor 입니다.

네, 대부분의 브라우저 (IE9+ 포함)

실제로 Kangax 호환성 테이블에 "속성 이름으로 예약된 단어" 항목이 있습니다.

http://kangax.github.io/compat-table/es5/ #test-Object/array_literal_extensions_Reserved_words_as_property_names

언급URL : https://stackoverflow.com/questions/7022397/using-reserved-words-as-property-names-revisited

반응형