JavaScript-js中,数组下标008是为什么这么特殊?

发布于 2016-10-27 00:56:31 字数 265 浏览 1184 评论 2

var a=[];
a[000] = 0;
a[001] = 1;
a[002] = 2;
a[003] = 3;
a[004] = 4;
a[005] = 5;
a[006] = 6;
a[007] = 7;
a[008] = 8;
a[009] = 9;
a[010] = 10;
alert(a);//0,1,2,3,4,5,6,7,10,9
//竟然没有8?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

虐人心 2017-09-16 11:44:25

经过多次测试,发现这是一个进制问题,我们都知道16进制是0x开头的,而0开头的数字在js中是表示八进制。那么,测试数组中的010转化为十进制后则为8,而008和009虽然也是以0开头的,但是后面数字8和9已经不能用八进制表示,又默认换成了十进制,因此008=8,009=9。
基于以上的规则,原来的数组可以进行一下转化:

 var a=[];
a[000] = 0; //a[0]
a[001] = 1; //a[1]
a[002] = 2; //a[2]
a[003] = 3; //a[3]
a[004] = 4; //a[4]
a[005] = 5; //a[5]
a[006] = 6; //a[6]
a[007] = 7; //a[7]
a[008] = 8; //a[8]
a[009] = 9; //a[9]
a[010] = 10;//a[8]

通过转化后,可以看出来010是与008的。

这不属于js的bug,是个比较容易忽略的问题。

归属感 2016-11-04 23:01:26

明白了,是因为js在将010转化成数字下标时是按八进制转换的,所以在给010赋值时就覆盖了008

alert(eval('010'))//8
alert(parseInt(010));//8
var i = 010;
alert(i);//8

var a=[];
a[000] = 0;
a[001] = 1;
a[002] = 2;
a[003] = 3;
a[004] = 4;
a[005] = 5;
a[006] = 6;
a[007] = 7;
a[008] = 8;
a[009] = 9;
a[010] = 10;

alert( a[008] === a[010]) //true

如果没有a[010] = 10;这句alert(a)就是0,1,2,3,4,5,6,7,8,9

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文