JavaScript-一个关于javascript数组的问题?
遇到一个奇怪的问题,
var a = new Array();
a[5] = 1;
a[6] = 2;
for(var i in a) {
alert(a[i]);//输出1,2
}
alert(a.length);//输出7
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
说一下我的理解.
首先, js里的数组也是对象.
http://www.w3schools.com/js/js_loop_for.asp
可见: "The JavaScript for/in statement loops through the properties of an object"
即JS中, for/in 这种循环是用来处理对象的属性的.
所以for(var i in a) {alert(a[i]);}, 这里, 数组a被当作对象了{5:1, 6:2}; 如果我们写:
for(var i in a) {
alert(i+":"+a[i]); //输出 5:1 和6:2
}
而.length是数组的属性,所以这里a当作数组处理, 输出长度7
如果我们需要循环输出数组, 则:
for(var i=0;i<a.length; i++){
alert(a[i]);
}
你最后给数组元素a[6]赋值了,此时js会给数组a创建一个长度为7的空间,并在第七个元素中赋以2,但是索引为5的前面都没有赋值,所以此时a[0]...a[4]是没有值的,但是内存的空间索引已经开辟出来,我觉这个不能算js的bug,每个语言都有他设计的特殊性
最后补充一点:
js的数组可以看做是特殊的对象(object),对象的属性有两种表示方法
如var a=Object();
1.a.myattr="lee";
2.a["myattr"]="lee";
请看:
var a = new Array();
a[5] = 1;
a[6] = 2;
alert(a);//输出,,,,,1,2
是js自动给数组0-4分配了空值,而使用for(var i in a)来遍历对象时自动把这些空值项跳过了