js数组-循环

107 阅读1分钟

for-in

  • 获取数组的索引值
  • 循环遍历所有的值,包含原型链上的,性能差
  • 返回数组中所有可枚举的属性,包含原型链上的
  • 更适用于对象遍历
  • 可以正确响应break、continue和return语句
let arr = [1, 2, 3, 4, 'string']
Array.prototype.name = '我是原型里面的属性'
for (let i in arr) {
  console.log(i) // 0, 1, 2, 3, 4, name
  console.log(arr[i]) // 1, 2, 3, 4, '我是原型里面的属性'
}

for-of (ES6)

  • 获取数组的值
  • 只会遍历当前数组对象,不会遍历原型链
  • 返回数组对象所有的值
  • 适用遍历数组/字符串
  • 可以正确响应break、continue和return语句
let arr = [1, 2, 3, 4, 'string']
Array.prototype.name = '我是原型里面的属性'
for (let item of arr) {
  console.log(item) // 1, 2, 3, 4, 'string'
}

forEach(ES5)

  • 默认索引只能从0开始
  • 使用break不能中断循环,使用return也不能返回到外层函数
  • 在循环的时候,会跳过空值
  • foreach在循环次数未知或者计算起来较复杂的情况下效率比for循环高
  • foreach循环时循环对象(数组、集合)被锁定,不能对循环对象中的内容进行增删改操作
语法:array.forEach(callback(currentvalue,index,arr) ,thisValue)

callback为数组中每个元素执行的函数,该函数可接受1-3个参数:

  •   currentvalue参数表示数组的当前元素项,必须的参数
  •   index参数表示的当前元素下标,可选参数
  •   arr参数表示当前元素所属的数组,可选参数

thisValue表示执行回调函数callback()时的this指向。可选参数。不写时,则默认是指向window全局

let arr = [1, 2, 3, 4, 'string']
Array.prototype.name = '我是原型里面的属性'
arr.forEach((item, index) => {
    console.log('item', item) //  1, 2, 3, 4, 'string'
    console.log('index', index) //  0, 1, 2, 3, 4
  }
)