对javascript对象键感到困惑

Jua*_*tés 3 javascript octal javascript-objects

如果我在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" ...}
Run Code Online (Sandbox Code Playgroud)

我知道我不能访问那些属性,myobject.0023122因为他们以数字开头,但我不能这样做myobject['0023122'],所以我假设数字0023122被转换为属性与键,9810因为我可以做到myobject['9810']并获得结果.

有什么吸引人之这是我所能做的myobject[99999]myobject['99999']这样的JavaScript并不需要拒绝我的钥匙,虽然我失去了我的前导零.我不是在谈论什么错误和正确的事,恰恰是什么数的原因0023122转换为9810同时甚至0023123摆好转换为23123正如 0099999转换为99999

  • 我认为这个数字太大了,这就是为什么我尝试用更大的数字.
  • 如果删除前导零,则键变为"23123"

dav*_*ave 5

Javascript支持八进制数:

正八进制数必须以0(零)后跟八进制数字开头.

0023122(八进制)是9810(十进制)

因此,任何数字小于8但以0开头的数字都将转换为八进制数.

如果它有8或9,如果它以0开头则会被截断.

091 - > 91

071 - > 57

当然,如果您使用字符串键,则无需担心:

 myobject["001111"] = "001111"
 myobject[001111] = 585
Run Code Online (Sandbox Code Playgroud)