JavaScript-一个关于javascript数组的问题?

JavaScript-一个关于javascript数组的问题?

清晨说ぺ晚安 发布于 2016-11-07 字数 196 浏览 1075 回复 3

遇到一个奇怪的问题,

var a = new Array();
a[5] = 1;
a[6] = 2;
for(var i in a) {
alert(a[i]);//输出1,2
}
alert(a.length);//输出7

发布评论

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

评论(3

晚风撩人 2017-10-31 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]);
}

虐人心 2017-10-31 2 楼

你最后给数组元素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";

虐人心 2017-10-28 1 楼

请看:

var a = new Array();
a[5] = 1;
a[6] = 2;
alert(a);//输出,,,,,1,2

是js自动给数组0-4分配了空值,而使用for(var i in a)来遍历对象时自动把这些空值项跳过了