【发布时间】:2014-11-28 00:19:43
【问题描述】:
如果我在 javascript 中定义一个新对象,var myobject = {} 我将有一个空对象,正如预期的那样。但是,我无法理解这背后的逻辑。请注意,这一切都有效,但我不明白,这比什么都好:
var myobject = {}; // Object{}
myobject[001] = "001"; // Object {1: "001"}, So 001 turns to 1
myobject[0099999] = "0099999"; // Object {1: "001", 99999: "0099999"}
//Last line only makes sense after this one (shortened version)▼
myobject[0023122] = "0023122" // Object {... 9810: "0023122" ...}
我知道我无法使用 myobject.0023122 访问这些属性,因为它们以数字开头,但我也不能这样做 myobject['0023122'] 所以我假设数字 0023122 转换为属性一个键9810,因为我可以执行myobject['9810'] 并得到结果。
有趣的是,我可以做到myobject[99999] 和myobject['99999'],因此即使我丢失了前导零,javascript 也不需要拒绝我的密钥。我不是在谈论什么是错什么是对,只是将数字 0023122 转换为 9810 而 甚至 @ 987654332@ 转换为0023123 优雅地转换为 23123 的原因是什么99999
- 我认为这个数字太大了,所以我尝试使用更大的数字。
- 如果删除前导零,则键变为“23123”
【问题讨论】:
-
它在成为密钥之前已被转换。引用它以保留零。无论如何,所有对象键都是字符串,因此只需以字符串开头并避免您演示的问题。
-
解决方案是“使用严格”。
-
@elclanrs:使用严格如何影响数字上的额外前导零?零仍然会被丢弃,它们只是不会留下八进制......
标签: javascript javascript-objects octal