普通for循环、for...in...、for...of...、forEach一文精简梳理

124 阅读1分钟

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)

})