習慣了寫java、python的童鞋對如下代碼確定很熟悉java
java:python
String[] s = {"a","b","c"}; for(String ss : s) { System.out.println(ss); }
python:數組
fruits = ['banana', 'apple', 'mango'] for index in range(len(fruits)): print '當前水果 :', fruits[index]
各個語言均有一些遍歷數組的快捷寫法,想固然的,有的朋友在js中就會使用以下的代碼app
var names = ["zhangsan","lisi","wangwu"]; for(var name in names) { console.log(name); }
其實否則,這裏的name並非數組的元素,而是元素對應的下標,測試
因此這段代碼輸出的並不是你所想象的大數據
「zhangsan」ui
「lisi」.net
「wangwu」prototype
而是輸出code
0
1
2
固然你能夠這樣寫:
var names = ["zhangsan","lisi","wangwu"]; for(var index in names) { console.log(names[index]); }
可是這樣寫有2點很差的地方,
1是據測試,大數據量的數組用for-in遍歷,廣泛效率低於for
2是若是不當心對數組進行了屬性擴展,那麼每每會出現意想不到的問題,好比如下的例子
var names = ["zhangsan","lisi","wangwu"]; names.age=123; Array.prototype.copy = function() {}; for(var index in names) { console.log(names[index]); }
上面輸出了names的全部屬性,除了數組定義的三個名字以外還有123和f(){};
zhangsan lisi wangwu 123 ƒ () {}
因此不推薦用for-in,通常使用普通的for循環便可,能夠以下寫法
var names = ["zhangsan","lisi","wangwu"]; names.age=123; Array.prototype.copy = function() {}; for(var index=0;index<names.length;index++) { console.log(names[index]); }
這樣寫是沒有問題的,固然還有ES6新出的for of也能夠
var names = ["zhangsan","lisi","wangwu"]; names.age=123; Array.prototype.copy = function() {}; for(var name of names) { console.log(name); }