1.最传统的for循环遍历
var arr=[1,2,3,4];
for(var i=0;i<arr,length;i++){
console.log(arr[i]);
}
//优化版
for(var i=0;len=arr.length;i<len;i++){
console.log(arr[i]);
}
//使用临时变量len将数组的长度存起来,避免重复获取,当数组较大时,优化效果比较明显
2.for…in循环
var arr=[1,2,3,4];
for(var i in arr){
console.log(arr[i]);
}
3.for…of
var arr=['a','b','c','d'];
for(var item of arr){
console.log(item);
}
for…in和for…of循环的区别
循环对象属性时使用for…in,在遍历数组的时候使用for…of
for…in是ES5标准,for…of是ES6标准
for…in循环出来的结果是key,而for…of循环出来的结果是value
for…of不能遍历普通对象,要和Object.keys()搭配使用
var arr=[1,2,3,4];
arr.name='zhangsan'
for(var i in arr){
console.log(arr[i]);
}
for(var item of arr){
console.log(item);
}
//for..in会遍历出后添加的自定义属性,但是for..of只可以循环可迭代的可迭代属性,不可迭代属性在循环中被忽略了
//迭代?
//可迭代对象是包含Symbol.iterator属性的对象,这个Symbol.iterator属性对应着能够返回该对象的迭代器的函数
//在ES6中,所有的集合对象(数组,Set和Map)以及字符串都是可迭代对象,可迭代对象可以与ES6中新增的for..of
4.forEach
var arr=[1,2,3,4];
//element 表示arr的单元项,index 表示arr单元项对应的索引值
arr.forEach(function(element,index){
console.log(element+'-'+index);
})
//未赋值的值是不会在foreach循环迭代的,但是手动赋值为undefined的元素是会被列出的
//例如:' '
5.map
var arr=[1,2,3,4];
//callback对数组元素进行操作,并将所有操作结果放入数组中并返回该数组
var arr2=arr.map(function(item){
return item.toUppercase();
})
console.log(arr2);
6.filter
//返回一个包含所有在回调函数上返回为true的元素新数组,回调函数在此担任的是过滤器的角色,当元素符和条件,过滤器就返回true,而filter则会返回所有符合过滤条件的元素
var arr=[1,2,3,4];
var arr2=arr.filter(function(item){
if(item>2){
return item;
}
})
console.log(arr2);
7.every
//当数组中的每一个元素在callback上被返回true时就返回true(注意:要求每一个单元项都返回true时才为true)
var arr=[1,2,3,4];
var arr1=arr.every(function(item){
if(item>0){
return item;
}
})
console.log(arr1) //true
8.some
//只要数组中有一项在callback上就返回true
var arr=[1,2,3,4];
var arr1=arr.some(function(item){
if(item>3){
return item;
}
})
console.log(arr1); //true