js所有遍历方法的异同,你清楚吗?

160 阅读2分钟

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

for

  • for 语句用于创建一个循环,它包含了三个可选的表达式,这三个表达式被包围在圆括号之中,使用分号分隔,后跟一个用于在循环中执行的语句(通常是一个块语句)。

  • for 语句头部圆括号中的所有三个表达式都是可选的。

  • 如果条件块表达式也省略的话,则必须确保在循环体内跳出,以防创建死循环。

  • 可以使用break语句 或者return 语句来跳出循环。

for in

  • for...in任意顺序遍历一个对象的除 Symbol 以外的可枚举属性
  • for ... in 不应该用于迭代一个关注索引顺序的数组。
  • for ... in 是为遍历对象属性而创建的,不建议与数组一起使用
  • for ... in 以任意顺序迭代对象的可枚举属性。
  • for ... in 遍历对象的属性时,其原型链上的属性都会被访问到。
  • 如果要保证只遍历自身的属性,我们可以这样做:使用 hasOwnProperty
  • 可以使用break return 来终止for ... in循环
for (var key in obj) { 
    if(obj.hasOwnProperty(key)){ 
        console.log(key); 
    } 
}

for of

  • for...of 在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句。
  • 对于for...of的循环,可以由breakthrow  continue    或return终止。在这些情况下,迭代器关闭。
  • for ... of 遍历可迭代对象(通常是数组),定义要迭代的数据。
  • for ... of 不能遍历 对象 。
let obj = {
    name: '章三',
    age: 20,
    city: '上海'
}
for (let item of obj) {
    console.log(item)
}
// 循环对象时 会报以下错误
Uncaught TypeError: person is not iterable
    at <anonymous>:2:21

forEach

  • 不能使用 break 或者 return语句跳出循环

map

filter

find

reduce

every

some