|
js 中数组遍历可以用以下两种:
var arr = ["张三","李四","王五"]; //for -var(这是通常所指的for循环) for(var p = 0 ;p<arr.length; p++){ console.log("for-var:"+arr[p]); } //for-in (foreach) for(var p in arr){ console.log("for-in:"+arr[p]); } 最后,可以发现输出结果一样的. 但如果,在进行遍历前,对Array进行扩展,在原型上添加一个方法: Array.prototype.test=function(){ } 添加后,代码如下: Array.prototype.test=function(){ } var arr = ["张三","李四","王五"]; for(var p = 0 ;p<arr.length; p++){ console.log("for-var:"+arr[p]); } for(var p in arr){ console.log("for-in:"+arr[p]); } 最后,输出结果如下:可以发现,for-in把新添加的test也进行输出。 for-var:张三 for-var:李四 for-var:王五 for-in:张三 for-in:李四 for-in:王五 for-in:function (){ } 数组遍历时for与for in区别: 1. for 取出来的值p , 为Number 类型 for- in 取出来的值p, 为String类型 2. 本质不同:for是通过不同的下标,来进行循环的取值,效率比较高 :for-in 是通过key来进行取值的,遍历的是数组里的所有对象,效率较低 当没有对数组进行扩展时,没有任何问题. 但如果对数组对象Array进行了prototype,for-in就会对扩展对象也取出来。 再此建议两点 1.不要用for in遍历数组,全部统一采用标准的for循环变量数组(我们无法保证我们引入的js是否会采用prototype扩展原生的Array) 2.如果要对js的原生类扩展的时候,不要采用prototype了 参考:http://www.tuicool.com/articles/3meE3a |
|