最常见的便是for循环和while循环,下面主要比较map、foreach;for in、Object.keys()、getOwnPropertyNames()之间的区别。
虽然后面三个方法都可以用来迭代数组和对象,但是我们应该尽量不要使用这些方法来遍历数组。
map和forEach
首先两者参数相同:
-
arr.map
(function(val,index,arr), thisVal) ; -
arr.forEach
(function(val,index,arr), thisVal).
区别在于回调函数作用不一样,map返回处理过的数组,而forEach无返回值。两者均不改变原数组。所以forEach得作用和普通的for循环是一样的。
for in、Object.keys()和getOwnPropertyNames()
首先,三个方法都可以迭代数组,但不推荐。
-
for(key in object)
可以遍历对象object的所有可枚举属性值(包括实例属性和原型链属性); -
Object.keys(object)
同样可以遍历对象object的可枚举属性,但不包括原型链上的属性,返回属性数组。 -
object.getOwnPropertyNames()
遍历object的所有属性(包括不可枚举的属性,比如function),但同样不包括原型链上的属性,返回遍历的属性数组。
Jquery中的$.map()和 $.each()
Jquery对遍历提供了$.map()喝$.each()方法,和js原生的map和forEach类似,但这两个方法不只是遍历数组,还能遍历对象,$.map()不管遍历数组还是对象,返回值任然是数组。
细节
- map和forEach中使用break;语句无效,需要使用try catch语句处理。