js循环
程序员文章站
2022-03-23 13:31:29
while do while for for in ES6语法 //Array.fromIE不识别,IE的兼容写法。 //可以把类数组对象转换为真正的数组 Set Map forEach //两个参数 x数组内容,y数组下标 //不支持IE9以下,但不包括IE9,IE8兼容写法 //原文链接:htt ......
var arr =[1,2,3,4,5,6] //全文通用数组,个别除外
while
var i=0;
while(i<=arr.length-1){ //条件需要有限制,故<=,否则会死循环
console.log(arr[i],i)
i++;//更新下标
}
do while
var i=0;
do{
console.log(arr[i],i)
i++;
}while(i<=arr.length-1);//下标从0开始,length-1
for
for(var i = 0;i<arr.length;i++){
console.log(i,arr[i])
}
for in
for(key in arr){
console.log(key,arr[key])
}
es6语法
//array.fromie不识别,ie的兼容写法。
//可以把类数组对象转换为真正的数组
if(!array.from){
array.from = function (el) {
return array.apply(this, el);
}
}
set
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
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){
return x*3
}
return x
})
arr.map((x)=>{
if(x==3){
return x*3
}
return x
})
foreach
//两个参数 x数组内容,y数组下标
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
//支持大多数类数组对象 参考https://developer.mozilla.org/en-us/docs/web/api/nodelist
//不支持普通对象遍历 如:{ } 会报错 is not iterable
//ie不支持
for(var i of arr){
console.log(i,arr[i-1])//for of的下标从1开始,故减1
}
//部分类数组对象 //原文链接:
// 字符串
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'
//循环控制语句
//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
}
//箭头函数单行语句可以简写,如:arr.map((x)=>x);
//es6新增了 遍历器(iterator)机制 iterator详解 : http://es6.ruanyifeng.com/#docs/iterator
//es6语法推荐使用编译插件来处理兼容性问题 如:babel
//以上为理解、原文、参考、暂时就想到这么多