一、for循环(数组方法)
特点:
- 不改变原数组,不返回新数组;有索引
- continue:跳出当前循环,直接进入下一次循环;break跳出循环本身,不再进行之后的循环,但可以执行for循环之外的的语句;return:跳出for循环,且循环之外的语句也不会执行;
注:跳出要在函数内,不然会报错
function test(){
var ary=[1,2,3];
for (var i=0;i<ary.length;i++){
console.log(arr[i])
}
}
test();
//输出 1 2 3
function test(){
var ary=[1,2,3];
for (var i=0;i<ary.length;i++){
if(i>1){
continue;
}
console.log(ary[i])
}
}
//输出 1 2
function test(){
var ary=[1,2,3];
for (var i=0;i<ary.length;i++){
if(i>1){
break;
}
console.log(ary[i])
}
console.log('外面的')
}
// 输出 1 2 外面的
function test(){
var ary=[1,2,3];
for (var i=0;i<ary.length;i++){
if(i>1){
return false;
}
console.log(ary[i])
}
console.log('外面的不会输出')
}
// 输出 1 2
二、forEach遍历(数组方法)
特点
- 不改变原数组
- 输出索引值和数组值,不会输出数组的原型对象
- 没有返回值,不能使用bread和return结束循环
Array.prototype.newWord = function () {
console.log("Hello");
}
Array.prototype.nesStr = 4
var ary = [1, 2, 3]
ary.name = '数组'
ary.forEach((value, i) => {
console.log(value);
console.log(i);
})
// 输出 1 0 2 1 3 2
三、map (数组方法)
特点
- 不改变原数组,返回新数组
- 可以使用break中断循环,可以使用return返回到外层函数
var ary = [1, 2, 3]
var newAry=ary.map(item=>{
item+=1
})
// newAry=[2,3,4]
四、for of 遍历
特点
- 不能遍历对象,不改变原数组
- 可以使用bread/continue/return
- item为索引数组值,不是索引值
var ary = ['a', 'b', 'c']
for(item of ary){
console.log(item);
console.log(ary[item])
}
// 输出 0 undefined 1 undefined 3 undefined
五、for in 遍历 (大部分用于对象)
特点
- 不改变原数组
- 用于循环遍历数组或对象属性
- item为键名
- 可枚举输出原型对象上的值
- 不可以使用bread/continue/return
let person={name:"小小",age:18}
let text=""
for (let item in person){
console.log(item)
console.log(person[item])
}
//输出 name 小小 age 18
let arry=[1,2,3,4,5]
for (let i in arry){
console.log(arry[i])
}
// 输出 1 2 3 4 5
Array.prototype.nesStr = 4
var ary = [1, 2, 3]
ary.name = '数组'
for (let i in ary){
console.log(i)
}
//输出 0 1 2 name nesStr
遍历速度
少量数据耗时差别不大大量数据耗时:for循环遍历 < for...of遍历 < forEach遍历 < for...in遍历 < map遍历