数组遍历
1.普通的for循环
for(var i = 0; i < arr.length; i++) {
}
2.改良的for循环
for(var i = 0,len=arr.length; i < len; i++) {
}
ps:比普通版的for循环好在使用临时变量缓存了长度,避免了重复获取数组的长度,提升了运行效率。当数组较大时能明显体现出效果。
3.forEach循环
arr.forEach(function(e){
});
ps:数组本身自带的方法,性能相对普通for循环稍低。
4.forEach变种
Array.prototype.forEach.call(arr,function(el){
});
ps:由于forEach是数组本身自带的方法,所以对于其他一些类型而言,是无法使用的(如NodeList)。性能较之普通forEach更低。
5.for in 循环
for(var i in arr) {
}
ps:在普通循环遍历中,性能最低。
6.map遍历
arr.map(function(n){
});
ps:性能比普通forEach低。
7.for of 遍历(ES6语法)
for(let value of arr) {
});
ps:性能比for in 稍好,但仍不如普通for 循环。
对象遍历
1.使用Object.keys()遍历
Object.keys(obj).forEach(function(key){
//代码
});
ps:返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性).
2.for in 遍历
for(var i in obj) {
}
ps:循环遍历对象自身的和继承的可枚举属性(不含Symbol属性).
3.使用Object.getOwnPropertyNames(obj)遍历
Object.getOwnPropertyNames(obj).forEach(function(key){
});
ps:返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性).
4.使用Reflect.ownKeys(obj)遍历
Reflect.ownKeys(obj).forEach(function(key){
});
ps:返回一个数组,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举.