JS中常用的三种判断语句
- 在JS的代码中,我们会存在一些逻辑判断
- if、else if、else
- 三元运算符
- switch case
if条件判断:
if(条件1){
// 条件1成立做的事情
}else if(条件2){
// 条件2成立做的事情(前提条件1不成立,否则走不到这个判断中)
}
...
else{
// 以上条件都不成立做的事情
}
单独用
if(条件){...}
if(条件){...}else{...} <=> 条件?...:...;
...
条件:
if(1){...} 把值转换为布尔判断真假
if(n==10){} 正常条件 == / === / >= / <= / > / <
if(n==1 || m==2){} 多条件 ||或者(一个为真,整体则为真) &&并且(都为真,整体才是真)
if(n==1 && m==2){}
- 简单的if-else语句应用:
let x=10;
if(x>=10)
{
x++;
}
else
//以上条件都不成立,执行else
{
x--;
}
console.log(x);
结果为
let x='10';
if(x==1)
{
x+=1;
}else if(x==5){
x+=2;
}else if(x==10){ //把字符串'10'转化为数字10进行比较, 条件成立
x+=3; //字符串拼接 '103'
}else{
x+=4;
}
console.log(x); // =>'103'
结果为:
三元运算符:处理最简单的if/else情况的
- 条件?条件成立做的事情:条件不成立做的事情;
- 如果需要做多件事情,则用小括号包起来,每一件事情中间用逗号分隔即可.
应用举例:
let x=10;
if(x>=10)
{
x++;
}
else
{
x--;
}
console.log(x);
//改为三元运算符
let x=10;
x >= 10 ? x++ : x--
console.log(x);
结果为:
- 在条件成立的时候,如果不想做一些事情,则使用null/undefined等来占位即可,不占位则会报错
let x=10;
if(x==10)
{
x++;
}
console.log(x);
//改为三元运算符
let x=10;
x==10 ? x++ : null
console.log(x);
结果为:
可以根据需求完成三元运算符的嵌套
let x=10;
if(x>0)
{
if(x<10)
{
x++;
}else{
x--;
}
}else{
x--;
}
console.log(x);
//改为三元运算符
let x=10;
x>0 ? (x<10? x++:x--) : x--;
console.log(x);
结果为:
switch case语句:
-
只能应用于等于什么值做什么事情,不能用于大于或小于什么值做什么事情.
-
每一种情况结束都要设置break,最后一个default等价于else,而且最后一个判断结束无需设置break.
//一个变量在不同值情况下的不同操作,我们可以改写为switch case判断
let x='10';
if(x==1)
{
x+=1;
}else if(x==5){
x+=2;
}else if(x==10){ //把字符串'10'转化为数字10进行比较, 条件成立
x+=3; //字符串拼接 '103'
}else{
x+=4;
}
console.log(x); // =>'103'
//改写为switch case语句
let x='10';
switch(x)
{
case 1: //=>在x等于1的情况下做什么
x+=1;
break, //每一种情况结束都要设置break.(以供当此条件成立并处理完事情后,通知不再向下执行代码)
case 5:
x+=2;
break;
case 10:
x+=3;
break;
default: //等价于else,而且最后一个判断结束无需设置break.
x+=4;
}
console.log(x); //=>'104' 每一种case情况都是基于===进行比较的(严格比较,需要保证数据类型的一致)
结果为:
JS中常用的三种循环语句
- 循环:多次重复进行某些事情的处理
- for循环
- for in循环
- while循环
- ...
for 循环
- 设定初始值
- 设定/验证循环执行的条件
- 符合条件的执行循环体中的代码
- 基于步长累加进入下一轮循环
for循环举例:
for (var i = 0; i < 5; i++)
{
// 循环体:重复做的事情(代码块)
//console.log(i); // 符合条件i<5的i输出 0 1 2 3 4
}
console.log(i); // =>5 当i=5的时候循环结束,这时i=5.
// i=0 =>0
// i=1 =>1
// i=2
// ...
// i=5 循环结束
结果为:
// 死循环:因为i永远是10,这样循环条件 i>=0 一直成立
var i = 10;
for (; i >= 0;)
{
console.log(i); //=> 10
}
// i-=2 => i=i-2
// i++ => i+=1 => i=i+1
var i = 10;
for (; i >= 0; i -= 2)
{
console.log(i); //=> 10 8 6 4 2 0
}
console.log('循环结束', i); //=>-2 当i=-2的时候循环结束,这时i=-2.
//上面这个和下面这个结果是一样的
var i = 10;
for (; i >= 0;)
{
console.log(i);
i -= 2;
}
console.log('循环结束', i); //=>-2 当i=-2的时候循环结束,这时i=-2.
结果为:
while循环
-
while 循环:我们在语法上只关注条件
while(条件){ // 条件成立执行 }
while循环举例:
var i = 10;
for (; i >= 0; i -= 2)
{
console.log(i); //=> 10 8 6 4 2 0
}
console.log('循环结束', i);
//把上面的for循环改写成 while 循环
var i = 10;
while (i >= 0) {
console.log(i);
i -= 2;
}
结果为:
for in循环
- 需求:依次遍历(迭代)数组或者对象中的每一项.
- 数组对象:特殊的对象(具备索引[索引从0开始]和length属性) ,数组的遍历一般用for循环. (但for循环只能遍历数字索引的每一项,不会遍历length属性的属性值).
- 类数组结构:不是数组,但是结构和数组非常的相似,它的遍历是可以用for循环的 (但for循环只能遍历数字索引的每一项).
- 普通对象:它的遍历是不能基于for循环处理的,因为没有代表有多少组键值对的length,也不像数组属性名都是数字索引...不具备数组这种结构的对象,是用不了for循环的.
- 遍历普通对象中的每一项,可以基于for in循环.
- for循环不是直接去迭代(遍历)数组或类数组中的每一项的,它是根据length的长度构建了一个循环n次的循环,每一次循环,把i变量的值作为索引,到数组或类数组中去查找对应索引的值,从而得到了我们所谓的数组当前项.
- for in循环直接作用在对象结构上,有多少组键值对,就会循环多少次.
遍历普通对象中的每一项,可以基于for in循环.
- for in循环:对象中有多少组键值对,就会循环多少次.
-
key:变量,存储的是当前迭代的属性名.
-
在迭代的时候,是优先按照从小到大的顺序遍历数字属性名的.
-
var obj = {
name: 'yunduo',
age: 11,
0: 10,
2: 30
};
for (var key in obj) {
//console.log(key); //=> 0 2 "name" "age"
console.log(obj[key]); // 获取当前遍历成员的属性值
// obj.key 与 obj[key]的区别
// obj.key : 获取obj对象中成员为"key"属性名对应的属性值 undefined
// obj[key] : 此处的key是一个变量,把每一轮循环key变量存储值作为成员,
到对象中查找对应的属性值 obj[0] obj[2]...
}
结果为:
- 数组和类数组可以基于for循环遍历每一项(指定的是数字索引的每一项);
- 而对象只能基于for in遍历每一项;但是数组和类数组也是对象,也可以基于for in遍历.
类数组
var arrayLike = {
0: 10,
1: 20,
2: 30,
x: 100,
y: 200,
length: 3
};
for (var key in arrayLike)
{
console.log(key); //for in循环6次 0 1 2 x y length
}
for (var i = 0; i < arrayLike.length; i++)
{
console.log(arrayLike[i]); //for循环3次 10 20 30
}
结果为:
数组
var arr = [10, 20, 30];
for (var key in arr) {
console.log(key); //for in 循环三次 0 1 2
// 原因:数组结构中的length属性是内置的(而且这个属性是不可枚举的:不能被for in遍历)
}
结果为:
break continue关键词
-
continue 结束当前这一轮循环(循环体中,continue下面代码不执行了),继续执行下一轮(步长累计还需要执行)
-
break 结束整个循环(循环体中,break下面代码不执行了,并且步长累计也不执行了) continue和break举例:
for (var i = 0; i < 10; i++)
{
if (i >= 3)
{
console.log(i);
i += 2;
continue;
}else{
console.log(i);// 0
i += 3;
break; //整个for循环结束
}
console.log(i);
}
console.log(i);// 3
结果为:
for (var i = 0; i < 10; i++)
{
if (i >= 3)
{
console.log(i); // 3 6 9
i += 2;
continue;
}
if (i >= 6)
{
console.log(i);
i += 3;
break;
}
console.log(i); // 0 1 2
}
console.log(i); // 12
结果为: