我可以使用一个空字符串作为对象标识符吗
Can I use an empty string as an object identifier?
我一直在修改对象,似乎可以将"(一个空字符串)作为属性名,如下所示:
o = {
'': 'hello',
1: 'world',
'abc': ':-)',
};
console.log(o['']);
看起来工作得很好,但我很好奇,这真的有效吗我研究了ECMA的规格,并向我们知识渊博的朋友谷歌询问了这个问题的变体,我的结论是我不知道。
我的来源
http://www.jibbering.com/faq/faq_notes/square_brackets.html
是的,从技术上讲,它是完全有效的,你可以安全地使用它。对象键需要是一个"字符串",它不排除空字符串。
如果这很方便,甚至有用,那就另当别论了。
请参阅我应该使用空属性密钥吗?
由于"空字符串"是ecmascript中的falsy values
之一,请考虑以下示例:
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}
不是。
相关文章:
- 字符串对象类型或基元类型也是如此
- Javascript-如何从字符串/对象引用回调
- JavaScript,字符串/对象操作的例外
- 将变量的值分配给我的对象标识符 JSON
- 如何在require中传递字符串/对象
- 字符串对象比较总是返回false
- 对字符串对象调用 .localeCompare 与构造特制的 Intl.Collator 对象之间的性能差异
- 生成动态 HTML,使用 JavaScript 更改名称值.错误:- 意外的字符串或标识符
- 将变量打印到控制台时出现意外字符串:[对象窗口]
- 如何使用javascript在字符串对象中添加原型
- 如何在 JavaScript 中设置/更新字符串对象的值
- jQuery:在 $.each 中从字符串类型转换为字符串对象
- 如何使用 String.replace() 方法而不弄乱 MS Word 2013 中的空白段落和对象标识符
- 将属性添加到字符串对象时出现问题
- 从字符串对象中删除第一个出现的字母
- 如何正确地将JQuery函数从表单的输入标记中检索到的这些字符串对象转换为数字
- 转换“;字符串对象“;到对象
- Javascript中字符串对象到字符串原语的转换
- JavaScript符号类型:(非字符串对象键)
- 我可以使用一个空字符串作为对象标识符吗