1、普通for循环,在数组和object中都能使用。但是对象中使用,不太合理,因为也是循环下标。
2、for...in...在Array和Obeject中遍历下标和key。而且还能遍历Array和Object原型上的属性。
var obj = {
x:100,
y:200,
z:300
}
obj.__proto__.a=400;
obj.__proto__.b=500;
for(let k in obj){
console.log(obj[k]);
if(obj.hasOwnProperty(k)){
console.log(obj[k]);
}
}
3、for...of... 可以用以遍历array,object,set,map;可以遍历属性和值;在遍历array和object时不能遍历原型上的属性和值。
arr:
for(let index of arr.keys()){}
for(let v of arr.values()){}
for(let [i,v] of arr.entries()){}
obj:
object对象不能直接使用obj.keys()这些方法,需要使用object.keys(obj)作为中介;
for(let index of object.keys(obj)){}
for(let v of object.values(obj)){}
for(let [i,v] of object.entries(obj)){}
set:
set是键值一样的,它的用法跟array一样:
for(let index of set.keys()){}
for(let v of set.values()){}
for(let [i,v] of set.entries()){}
map:
map键值是自定义的,它的用法也跟array一样:
for(let index of map.keys()){}
for(let v of map.values()){}
for(let [i,v] of map.entries()){}
4、forEach 只能遍历array,set,map,不能遍历对象;forEach接收到的是一个回传参数函数;
array\set\map使用方式一样:
var arr = [1,3,5,7]
arr.forEach((v,k,arr)=>{
console.log(v,k,arr)
})