JavaScript入门教程

JavaScript简介
JavaScript语法基础
JavaScript流程控制
JavaScript函数
面向对象编程
JavaScript事件
JavaScript DOM
正则表达式
JavaScript BOM
AJAX

专题分析

浏览器兼容性
JS优化
Web前端开发规范
编辑器推荐
总结和笔记

学习助手

对象参考手册
ECMAScript分析
数据中心
QQ交流群

JS遍历数组

在对象与 JSON 这一章中,我们讨论了 for…in 这种遍历对象的方式,这种方式同样适用于数组,比如:
var array = [1, 2, 3, 4];
for(var item in array){
    print(array[item]);
}

将会打印:
1
2
3
4

但是这种方式并不总是有效,比如我们扩展了内置对象 Array,如下:
    Array.prototype.useless = function(){}

然后重复执行上边的代码,会得到这样的输出:
1
2
3
4
function(){}

设想这样一种情况,如果你对数组的遍历做 sum 操作,那么会得到一个莫名其妙的错误,毕竟函数对象不能做求和操作。幸运的是,我们可以用另一种遍历方式来取得正确的结果:
for(var i = 0, len = array.length; i < len;i++){
    print(array[i]);
}

这种 for 循环如其他很多语言中的写法一致,重要的是,它不会访问哪些下标不是数字的元素,如上例中的 function,这个 function 的下标为 useless,是一个字符串。从这个例子我们可以看出,除非必要,尽量不要对全局对象进行扩展,因为对全局对象的扩展会造成所有继承链上都带上“烙印”,而有时候这些烙印会成为滋生 bug 的温床。