猿问

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

jshashtable状态:


JavaScript的内置对象的确使用方括号表示属性来提供哈希表功能,前提是您的键是字符串或数字:


据我所知,键只是字符串,(因为数字无论如何都被强制转换为字符串)。我只想检查一下,确保上面所说的是假的(因为键不能是数字)。


ECMA标准是否对此做了任何说明。


还是实现特定于浏览器?


侃侃无极
浏览 372回答 3
3回答

红颜莎娜

好吧,这是我的答案-主要是因为我对其他(正确)答案中的引用不满意- []中属性名称的表达式始终被强制转换为字符串,并且此行为在规范中已得到很好的定义。因此,根据对所引用报价的解释,可以将其视为误导和/或不正确的。但是,引言并不假定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。快乐的编码。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答