循环
JavaScript 支持不同类型的循环:
for - 循环代码块一定的次数
for/in - 循环遍历对象的属性
while - 当指定的条件为 true 时循环指定的代码块
do/while - 同样当指定的条件为 true 时循环指定的代码块
if语句
定义:为不同的决定来执行不同的动作。
if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码;
if…else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码;
if…else if…else 语句 - 使用该语句来选择多个代码块之一来执行;
let a=1;
if(a>1){
console.log("a>1");
}else if(a===1){
console.log("a=1");
}else{
console.log("a<1");
};
//a=1
do-while语句
一种后测试循环语句,即只有在循环体中的代码执行之后,才会测试出口条件。换句话说,在对条件表达式求值之前,循环体内的代码至少会被执行一次。
注意事项:
1、如果条件一直为 true,循环将不会结束(无限循环)。这将会使你的浏览器崩溃。
2、如果你使用变量作为条件,请在循环开始前初始化变量,并让它在循环中自增长,如果你忘记设置变量自增长,也将会出现无限循环的情况, 浏览器同样会崩溃。
卡死情况示例
//卡死情况示例代码:
let a=1;
do{
a+=3;
//为了避免卡死,可以人为设置跳出
//if(a>10){
// break;
//}
}while(a>1);
console.log(a);
正常示例
let a=1;
do{
a+=3;
}while(a<10);
console.log(a);
//10
while语句
while 语句只要指定条件为 true,就会执行循环。
提示: 使用 break 语句来跳出循环,使用continue 语句用于跳出当前的迭代,并开始下一次迭代。
注意事项
1、如果你的条件一直为 true,该循环永远不会结束。该可能导致浏览器崩溃。
2、如果您忘记增加条件中所用变量的值,该循环永远不会结束。该可能导致浏览器崩溃。
let a = 0;
while(a<5){
a++;
}
console.log(a);
//5
for语句
for(var i=0; i<5; i++){
console.log( i )
}
//0 1 2 3 4
for-in语句
for/in 语句用于循环对象属性。
循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。
注意事项:
不要使用 for/in 语句来循环数组的索引,你可以使用 for 语句替代。for in 语句对数组对象进行遍历潜在的bug在于:for in会遍历到数组的后面添加的原型链属性,并不会遍历到原生原型链上的属性!!!并不是简单地便利数组中的数据。
var obj = { objName1:"张三", objName2:"李四", objName3:"王五"};
for( key in obj ){
console.log( obj[key] ); //张三 李四 王五
}
为什么不建议数组使用for-in:
//数组==(下例说明为什么不建议数组使用for-in)==
Array.prototype.istrue = function(value) {return true;}
var obj = ["张三", "李四", "王五"];
for( key in obj ){
console.log( obj[key] ); //张三 李四 王五 ƒ (value) {return true;}
}
label语句
break和continue语句都可以与lebel语句联合使用,从而返回代码中特定的位置。用于嵌套循环,减少循环次数。虽然break和continue语句都可以与lebel语句能够执行复杂的操作,但如果过度使用也会给调试带来麻烦。应该根据实际业务适当使用
var num=0;
outermost:
for(var i=0; i<10;i++){
for(var j=0; j<10; j++){
if(i==5 && j==5){
break outermost;
}
num++;
}
}
console.log(num); //55
var num=0;
outermost:
for(var i=0; i<10;i++){
for(var j=0; j<10; j++){
if(i==5 && j==5){
continue outermost;
//i=0 1 2 3 4 5 6 7 8 9
//j=0 1 2 3 4 6 7 8 9
//i=5的时候,j只执行到4,其他正常执行,所以是95
}
num++;
}
}
console.log(num); //95
break和continue语句
break 语句用于跳出循环。continue 用于跳过循环中的一个迭代。
break 语句跳出循环后,会继续执行该循环之后的代码(如果有的话):
for(let i=0; i<10; i++){
if(i===5){
break;
}
console.log(i); // 0 1 2 3 4 循环断了,但是代码还是会往后走的
}
continue 语句中断循环中的迭代,如果出现了指定的条件,然后继续循环中的下一个迭代。
for(let i=0; i<10; i++){
if(i===5){
continue;
}
console.log(i); // 0 1 2 3 4 _ 6 7 8 9 中断了5
}
with语句
with 语句用于设置代码在特定对象中的作用域。with 语句是运行缓慢的代码块,尤其是在已设置了属性值时。大多数情况下,如果可能,最好避免使用它。
let nums = { a:1,b:2,c:3 };
=============================================
let nums0 = nums.a;
let nums1 = nums.b;
let nums2 = nums.c;
console.log(nums0,nums1,nums2); //1 2 3
=============================================
with(nums){
let nums0 = a;
let nums1 = b;
let nums2 = c;
console.log(nums0,nums1,nums2); //1 2 3
}
switch语句
switch 语句来选择要执行的多个代码块之一。
switch(n)
{
case 1:
执行代码块 1
break;
case 2:
执行代码块 2
break;
default:
n 与 case 1 和 case 2 不同时执行的代码
}
工作原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行,请使用 default 关键词来规定匹配不存在时做的事情。