为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript对象中的键只能是字符串吗?

Javascript对象中的键只能是字符串吗?

慕村225694 2019-10-12 10:07:25
jshashtable状态:JavaScript的内置对象的确使用方括号表示属性来提供哈希表功能,前提是您的键是字符串或数字:据我所知,键只是字符串,(因为数字无论如何都被强制转换为字符串)。我只想检查一下,确保上面所说的是假的(因为键不能是数字)。ECMA标准是否对此做了任何说明。还是实现特定于浏览器?
查看完整描述

3 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

好吧,这是我的答案-主要是因为我对其他(正确)答案中的引用不满意- []中属性名称的表达式始终被强制转换为字符串,并且此行为在规范中已得到很好的定义。因此,根据对所引用报价的解释,可以将其视为误导和/或不正确的。


但是,引言并不假定x[42]且x["42"]是不同的。它指出-在误导性地排除了其他原语和细节的情况下- 在正常属性解析下,只有字符串和数字才可用作 “哈希键”(实际上是属性名),并且在这种意义上,引用可以说是正确的。


这些规则来自标准ECMA-262 ECMAScript语言规范第5版(2009年12月)


在“ 11.2.1属性访问器”部分中(省略了生产规则):


生产的MemberExpression:MemberExpression [Expression]的计算如下:


令baseReference为评估MemberExpression的结果。

令baseValue为GetValue(baseReference)。

令propertyNameReference为计算Expression的结果。

设propertyNameValue为GetValue(propertyNameReference)。

调用CheckObjectCoercible(baseValue)。

设propertyNameString为ToString(propertyNameValue)。

如果要评估的语法产生包含在严格模式代码中,则使strict为真,否则使strict为假。

返回类型为Reference的值,其基值为baseValue,其引用名称为propertyNameString,其严格模式标志为strict。

快乐的编码。


查看完整回答
反对 回复 2019-10-12
  • 3 回答
  • 0 关注
  • 971 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信