source

빈 문자열을 개체 식별자로 사용할 수 있습니까?

manysource 2023. 3. 31. 22:30

빈 문자열을 개체 식별자로 사용할 수 있습니까?

오브젝트를 만지작거리고 있는데, 다음과 같이 속성 이름으로 "("빈 문자열")을 사용할 수 있는 것 같습니다.

o = {
    '':    'hello',
    1:     'world',
    'abc': ':-)',
};
console.log(o['']);

잘 되는 것 같습니다만, 궁금하네요.이게 정말 유효한 건가요?저는 ECMA의 사양을 살펴보고 항상 알고 있는 우리의 친구에게 구글의 다양한 질문들을 물어봤지만, 제 결론은 잘 모르겠다는 것입니다.

내 정보원

http://www.jibbering.com/faq/faq_notes/square_brackets.html

네, 엄밀히 말하면 완전히 유효하고 안전하게 사용할 수 있습니다.개체 키는 빈 문자열을 제외하지 않는 "문자열"이어야 합니다.

그것이 편리할지 아니면 심지어 유용한지는 또 다른 이야기다.

자세한 내용은 빈 속성 키를 사용해야 합니까?를 참조하십시오.


'빈 문자열'은 다음 중 하나이기 때문에falsy valuesecmascript에서는 다음 예를 고려합니다.

var foo = {
    ':-)': 'face',
    'answer': 42,
    '': 'empty'
};

Object.keys( foo ).forEach(function( key ) {
    if( key ) {
        console.log(key);
    }
});

그 스니펫은 로그만 남습니다.:-)그리고.answer그럼 이게 함정 중 하나군요

괜찮은 것 같아요.(*)고객님의 케이스에 적용):

PropertyAssignment :
    (*) PropertyName : AssignmentExpression
    get PropertyName ( ) { FunctionBody } 
    set PropertyName ( PropertySetParameterList ) { FunctionBody }

PropertyName :
    IdentifierName
    (*) StringLiteral
    NumericLiteral

StringLiteral ::
    " DoubleStringCharacters opt "
    (*) ' SingleStringCharacters opt '

문자는 옵션이기 때문에 빈 문자열이 유효합니다.

주의해 주세요.IdentifierName(즉, 없음)'또는")에서는 빈 문자열을 사용할 수 없습니다.

IdentifierName ::
    IdentifierStart
    IdentifierName IdentifierPart

IdentifierStart ::
    UnicodeLetter
    $
    _ 
    \ UnicodeEscapeSequence

그렇게,{'': 123}유효한데 반해{: 123}그렇지 않습니다.

언급URL : https://stackoverflow.com/questions/8757177/can-i-use-an-empty-string-as-an-object-identifier