首页 > 技术文章 > 几种循环

ban1234 2019-07-26 13:42 原文

js循环

 
?
1
var arr =[1,2,3,4,5,6] //全文通用数组,个别除外

while

?
1
2
3
4
5
6
7
8
9
var i=0;
 
while (i<=arr.length-1){ //条件需要有限制,故<=,否则会死循环
 
     console.log(arr[i],i)
 
     i++; //更新下标
 
}

do while

?
1
2
3
4
5
6
7
8
9
var  i=0;
 
do {
 
     console.log(arr[i],i)
 
     i++;
 
} while (i<=arr.length-1); //下标从0开始,length-1

for

?
1
2
3
4
5
for ( var i = 0;i<arr.length;i++){
 
     console.log(i,arr[i])
 
}

for in

?
1
2
3
4
5
for (key in arr){
 
     console.log(key,arr[key])
 
} 

ES6语法

//Array.fromIE不识别,IE的兼容写法。

//可以把类数组对象转换为真正的数组

?
1
2
3
4
5
if (!Array.from){
  Array.from = function (el) {
   return Array.apply( this , el);
  }
} 

Set

?
1
2
3
4
5
6
7
8
9
10
11
12
13
var a=[1,1,1];
 
var b= new Set(a); //去重
 
console.log(b)
 
b.add( 'li' ) //添加
 
b. delete ( 'li' ) //删除
 
b.has( 'li' ) //返回true false;
 
b.clear() //清空 

Map

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var eMap = new Map([ [ 'a' , 1],[ 'b' , 2],[ 'c' , 3] ]);
 
eMap.get( 'a' ) //1 //获取值
 
eMap.has( 'b' ) //true //检测key是否存在,返回true false;
 
eMap. delete ( 'c' ) //删除
 
eMap.set( 'c' ,3) //添加
 
eMap.clear() //清空
 
//相当于返回一个新数组
arr.map( function (x){
   if (x==3){<br>     return x*3<br>  }
   return x<br>})
 
arr.map((x)=>{
   if (x==3){<br>     return x*3<br>  }
   return x
}) 

forEach

//两个参数 x数组内容,y数组下标

?
1
2
3
4
5
arr.forEach((x,y)=>{
 
     console.log(x,y)
 
})

//不支持IE9以下,但不包括IE9,IE8兼容写法

 

复制代码
if ( !Array.prototype.forEach ) {

    Array.prototype.forEach = function forEach( callback, thisArg ) {

        var T, k;

        if ( this == null ) {
            throw new TypeError( "this is null or not defined" );
        }
        var O = Object(this);
        var len = O.length >>> 0;
        if ( typeof callback !== "function" ) {
            throw new TypeError( callback + " is not a function" );
        }
        if ( arguments.length > 1 ) {
            T = thisArg;
        }
        k = 0;

        while( k < len ) {

            var kValue;
            if ( k in O ) {

                kValue = O[ k ];
                callback.call( T, kValue, k, O );
            }
            k++;
        }
    };
}
复制代码

for of

 

//不支持普通对象遍历 如:{ } 会报错 is not iterable

//IE不支持

?
1
2
3
4
5
for ( var i of arr){
 
     console.log(i,arr[i-1]) //for of的下标从1开始,故减1
 
}

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 字符串
         var str = "hello" ;
         
         for ( let s of str) {
           console.log(s); // h e l l o
         }
         
// DOM NodeList对象
         let paras = document.querySelectorAll( "p" );
         
         for ( let p of paras) {
           p.classList.add( "test" );
         }
         
// arguments对象
         function printArgs() {
           for ( let x of arguments) {
             console.log(x);
           }
         }
         printArgs( 'a' , 'b' ); // 'a' 'b'
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//循环控制语句<br>//break:当前条件成立且执行后跳出。
//continue:跳过当前成立条件,继续执行循环。
   //for循环,continue之后执行语句,是跳过条件的新下标。
   //while、do-while循环,continue需放到i++之后使用,否则,continue将跳过i++进入死循环。
 
for ( var i = 1; i < 10; i++){ 
         if (i == 4){
             continue ;
         }
         console.log(i); //1 2 3 5 6 7 8 9
     }
 
  for ( var i = 1; i < 10; i++){
         if (i == 4){
             break ;
         }
          console.log(i); //1 2 3
     }   

  

 

推荐阅读