编程语言
首页 > 编程语言> > 对javascript对象键感到困惑

对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