【ES6】for, for in , for of
for循环
for (let index = 0; index < array.length; index++) {
const element = array[index];
}
for in
- for in 遍历数组
// for in 遍历数组的每个下标
for (const index in array) {
const element = array[index] // 拿到数组中的每一项进行操作
}
- for in 遍历对象
// for in 遍历对象中的每个key
// 对象object的属性访问器有点号.和方阔括号[]两种
for (let key in object) {
const element = object[key] // 拿到对象中的每一个键key对应的值value
}
- for in 会遍历到对象上的原型方法,如果不想遍历原型方法和属性值,可以在循环内部判断一下,hasOwnPropery方法可以判断某属性是否是该对象的实例属性
for (let key in object) {
if (Object.hasOwnProperty.call(object, key)) {
const element = object[key];
}
}
for of
for of 遍历数组
具备iterator接口的数据:Array,Arguments,Set,Map,String,TypedArray,Nodelist
只有有iterator接口的数据,才能使用for of遍历,Object是不行的。
// for of 遍历数组的迭代器
for (let iterator of array) {
// 数组中每个迭代器就是数组中的每一项
const element = iterator // 拿到数组中的每一项进行操作
}
总结
使用for in会遍历数组所有的可枚举属性,包括原型。例如原型方法method和name属性
所以for in更适合遍历对象,不要使用forin遍历数组。当不希望遍历对象原型的方法和属性时使用hasOwnPropery判断一下
for..of适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合.但是不能遍历对象,因为没有迭代器对象.与forEach()不同的是,它可以正确响应break、continue和return语句
for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用for-in循环或使用Object.keys()方法:
洗尽铅华始见金,褪去浮华归本真