1.for循环
1.for有三个表达式:
- 声明环境变量;
- 判断循环的条件;
- 更新循环变量;
2.for循环执行的特点:
- 先判断在执行;
- 这三个表达式有多重身份组成,第二个判断条件用&& 或||连接
for(var i = 0 ; i <10 ; i++){
console.log(i);// 0 1 2 3 4 5 6 7 8 9 10
}
2.while循环
循环特点:先判断后执行;
var num = 1;//1、声明循环变量
while (num<10){//2、判断循环条件;
console.log(num);//3、执行循环体操作;
num++;//4、更新循环变量;
}
3.do while循环
特点:先执行在判断,即使初始条件不成立,dowhile循环至少执行一次,也就是dowhile比while循环多执行一次。
var num = 10;
do{
console.log(num);//10 9 8 7 6 5 4 3 2 1 0
num--;
}while(num>=0);
console.log(num);//-1
循环的嵌套:
外层循环控制行,内层循环控制列
可解决多行多列的结构
for(var j = 1; j<9 ;j++){
for(var i = 0;i < j+1 ; i++){
console.log("*");
}
console.log("<br>")
}
4.for in
- for…in 循环返回的值都是数据结构的键值名;
- 遍历对象时返回的是对象的key值;遍历数组时是返回数组的下标;
- for…in 循环不仅可以遍历数字键名,还可以遍历原型上的值和手动添加的值
- 特定情况下,for…in 可以遍历任意顺序的键名
let obj = {
name:"wangyufei",
age : "18",
height : "180"
}
for(let i in obj){
console.log(i,obj[i]);
}
5.for of
- 遍历的是数组中的元素;
- 一个数据结果只要部署了Symbol.iterator 属性,就被视为具有iterato接口,就可以使用for of 属性;
- 以下数据结构部署了Symbol.iterator 属性,遇上这些属性,都可以使用for of 进行遍历;
- 数组Array;
- Map;
- String;
- arguments对象;
- Nodelist对象,就是获取的dom列表集合;
- 如果要遍历一个对象的键值,就会报错,原因是没有Symbol.iterator属性;
- for of 可以与return,break、continue 配合使用,可以随时退出循环;
- 6.类似数组的对象操作
// 字符串
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'
6.循环控制语句
- break:跳出本次循环,继续执行循环后面的语句;如果循环有多层,则break只能跳出本次循环,也就是一层;
- continue: 跳过本次循环的剩余代码,继续执行下一次循环;
(1) 对于for循环,continue之后执行的语句,是循环变量更新语句i++;
(2)对于while,dowhile循环,continue之后执行的语句,是循环条件判断;
因此,使用这两个循环时,必须将continue放到i++之后使用,否则continue将跳过i++进入死循环;
for(var i=0;i<10;i++){
if(i == 5){
break;
}
console.log(i);//0,1,2,3,4
}
for(var i=0;i<10;i++){
if(i == 5){
continue;
}
console.log(i);//0,1,2,3,4,6,7,8,9
}