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

发布于 2016-11-07 06:31:37 字数 182 浏览 1174 评论 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

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

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

发布评论

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

评论(3

晚风撩人 2017-10-31 03:40:12

说一下我的理解.

首先, 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 02:07:33

你最后给数组元素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 06:42:12

请看:

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

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

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