习惯了写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); }