JavaScript对象中数字键类型中节点和Chrome之间的不一致

JavaScript对象中数字键类型中节点和Chrome之间的不一致,javascript,node.js,google-chrome,v8,Javascript,Node.js,Google Chrome,V8,当我向JavaScript对象添加数值属性时,我观察到Chrome中的行为与节点中的行为不同 节点将数字键转换为字符串: > foo = {} {} > foo[123] = 'abc' 'abc' > foo { '123': 'abc' } 与我的预期相反,Chrome似乎保留了数字键的类型: > foo = {} Object {} > foo[123] = 'abc' "abc" > foo Object {123: "abc"} 我想要Chrom

当我向JavaScript对象添加数值属性时,我观察到Chrome中的行为与节点中的行为不同

节点将数字键转换为字符串:

> foo = {}
{}
> foo[123] = 'abc'
'abc'
> foo
{ '123': 'abc' }
与我的预期相反,Chrome似乎保留了数字键的类型:

> foo = {}
Object {}
> foo[123] = 'abc'
"abc"
> foo
Object {123: "abc"}

我想要Chrome的行为,但我正在使用Node。有没有办法在节点中保留数字键的类型?

它仍然是一个字符串,只是在控制台中的显示方式不同而已<代码>对象.键(foo)[0];//foo中的“123”和
“123”正确
123也是
true
但这是因为它被转换为字符串。If
typeof Object.keys(foo)[0]!='字符串“
则主机不符合ECMA-262。请注意,如果属性名称是有效标识符,则不需要在对象文字中引用它。但是,如果它不是一个有效的标识符,那么它必须在引号中(即Chrome应该显示
'123'
)。这是为了击败一匹死马,因为我知道OP的目的:Javascript对象中的键总是字符串。除字符串外,不能有数字键、正则表达式键或任何其他类型的键。甚至数组的键也是字符串;只是当你使用一个数字(例如,
foo[123]
)解除引用时,这个数字被转换成一个字符串。我应该使用
typeof
来检查键的类型。即使我对(key in foo){console.log(key)}执行
操作,也会显示不带引号的整数键。Firefox的解释器也做同样的事情,我想用JavaScript对象来存储集合数据。我的解决方案是将真实值存储为属性(字符串化的值仍然充当键)。如果我想在集合中同时包含
123
“123”
,那就有问题了,但这只是一个练习,所以我不必担心这一点。不过,我想知道在真正的实现中如何处理它。