JavaScript-js中,数组下标008是为什么这么特殊?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
经过多次测试,发现这是一个进制问题,我们都知道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,是个比较容易忽略的问题。
明白了,是因为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