问题来源是遇到的一道题:
正确答案:ABCD,答案解析见文章最后
for,for in,forEach,for of循环遍历辨析(由于字符串与数组的遍历是一样的,所以关于字符串的遍历这里不再赘述)
首先,最简单的for循环遍历
var arr = [10, 20, 30, 40, 50]; for(var i = 0; i < arr.length; i++){ console.log(arr[i]) }
for in(快速枚举法)(遍历字符串的方法与数组相同)
for(var i in arr){ //i 是下标 console.log(arr[i]); }
var obj = {
name: "小明", age: 40, sex: "男" } for(var i in obj){ //i 属性 console.log(i, obj[i]);}
从上面可以看出for in其实是通过遍历数组、字符串的下标来进行遍历的,而for in遍历对象是通过属性来进行遍历来的。
forEach(ECMA5中提供的方法)
arr.forEach(function(item, index, arr){ console.log(item, index); })
这里的item代表数组的元素(在字符串中代表的是一个字符),index代表的是数组的下标,arr是数组名(或字符串名)
【注意】forEach是ECMA5中提供的一种遍历数组的方法,他只能用来遍历数组不能遍历字符串和对象
for of(ECMA6中提供的一种遍历方法)
for(var item of arr){ console.log(item); }
for of 方法遍历数组或字符串实质上是直接遍历的数组的值
综上所述
1)for、for in、for of、forEach都可以用来遍历数组,其中,for、for in循环遍历数组是通过遍历数组的下标进行遍历的,而forEach和for of是通过遍历值(即数组的元素)来进行遍历的。
2)for、for in、for of都可以用来遍历字符串,遍历原理与数组一样;forEach不能用来遍历字符串。
3)只有for in可以用来遍历对象。for in遍历对象是通过遍历对象的属性遍历的。
文章开始的问题显而易见。。。
【注意】for of还可以用来对集合进行遍历,通过遍历值遍历。
(上述为自己理解,如有错误欢迎指正)
来源:https://www.cnblogs.com/dingchen/p/10522469.html