我一直在修补对象,看起来你可以将'(一个空字符串)作为属性名称,如下所示:
o = {
'': 'hello',
1: 'world',
'abc': ':-)',
};
console.log(o['']);
Run Code Online (Sandbox Code Playgroud)
似乎工作得很好,但我很想知道,这真的有效吗?我已经戳了ECMA的规格,并问我们知识渊博的朋友谷歌的问题变化,我的结论是我不知道.
我的消息来源
jAn*_*ndy 27
是的,从技术上讲它完全有效,你可以安全地使用它.对象键需要是"字符串",不排除空字符串.
如果那是方便的,甚至是有用的另一个故事.
请参阅我应该使用空属性键吗?
由于'空字符串'是falsy valuesecmascript中的一个,请考虑以下示例:
var foo = {
':-)': 'face',
'answer': 42,
'': 'empty'
};
Object.keys( foo ).forEach(function( key ) {
if( key ) {
console.log(key);
}
});
Run Code Online (Sandbox Code Playgroud)
该片段只会记录:-)和answer.这样做是一个陷阱.
看起来不错((*)适用于您的情况):
PropertyAssignment :
(*) PropertyName : AssignmentExpression
get PropertyName ( ) { FunctionBody }
set PropertyName ( PropertySetParameterList ) { FunctionBody }
PropertyName :
IdentifierName
(*) StringLiteral
NumericLiteral
StringLiteral ::
" DoubleStringCharacters opt "
(*) ' SingleStringCharacters opt '
Run Code Online (Sandbox Code Playgroud)
由于字符是可选的,因此空字符串是有效的。
请注意IdentifierName(即没有'or ")不允许空字符串:
IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart ::
UnicodeLetter
$
_
\ UnicodeEscapeSequence
Run Code Online (Sandbox Code Playgroud)
因此,{'': 123}有效而{: 123}无效。
| 归档时间: |
|
| 查看次数: |
7165 次 |
| 最近记录: |