对javascript对象键感到困惑
作者:互联网
如果我在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的原因是什么,而0023123优雅地转换为23123,就像0099999转换为99999
>我认为它太大了,这就是为什么我尝试用更大的数字.
>如果删除前导零,则键变为“23123”
解决方法:
Javascript支持八进制数:
Positive octal numbers must begin with 0 (zero) followed by octal digit(s).
0023122(八进制)是9810(十进制)
因此,任何数字小于8但以0开头的数字都将转换为八进制数.
如果它有8或9,如果它以0开头则会被截断.
091 – > 91
但
071 – > 57
当然,如果您使用字符串键,则无需担心:
myobject["001111"] = "001111"
myobject[001111] = 585
标签:javascript,javascript-objects,octal 来源: https://codeday.me/bug/20190728/1561081.html