1.6 JS 中的操作语句: 判断语句 循环语句
1.6.1 判断语句
何为判断 : 条件成立做什么,不成立又做什么
常用的几种判断语句:
-
if / else if / else
-
三元运算符
-
switch case
1.6.1.1 if / else
- 语法
if(条件){
条件成立执行
}else if(条件 2){
条件2成立执行
}
...
else{
以上条件都不成立
}
// 注意 : 赋值的操作永远是恒成立的 比如说 if(a = 10)
let a = 10;
if (a <= 0) {
console.log('哈哈');
} else if (a > 0 && a < 10) {
// A && B A 和 B 都成立才为 TRUE
// A || B A 或 B 任一成立就为 TRUE
console.log('喝喝');
} else if (a == 10) {
console.log('嘿嘿');
} else {
console.log('嘻嘻');
}
最终输出'嘿嘿'
let a = 10;
if (a >= 0) {
console.log('哈哈');
} else if (a > 0 && a < 10) {
// A && B A 和 B 都成立才为 TRUE
// A || B A 或 B 任一成立就为 TRUE
console.log('喝喝');
} else if (a == 10) {
console.log('嘿嘿');
} else {
console.log('嘻嘻');
}
最终输出'哈哈'
对比以上可得结论: 只要有一个条件成立就执行,无论后续还有无成立的其他条件
- 条件可以多样性, 等于 小于 大于的比较 一个值 或者是取反等,最后都要计算出是 true 还是 false
条件可以多样性 :
if(!a){}
if(a){}
...
-
三元运算符
适用于简单 if / else
语法: 条件?条件成立执行的代码:条件不成立执行的代码,
注意:
1.如过处理的事情比较多,用小括号包括,每一件事用逗号分割
2.如过不需要处理事情,可以用 null/ undefined 占位
// 简易 if /else let a = 10; if (a <= 0) { console.log('哈哈'); } else { console.log('嘻嘻'); } 转换为 a <= 0 ? console.log('哈哈') : console.log('嘻嘻') // 多条件 占位 if (a > 0 && a < 20) { a++; console.log(a); } 转换为 a > 0 && a < 20 ? a++ ,console.log(a)): null // 三元套三元 let a = 10; if (a > 0) { if (a < 10) { a++; } else { a--; } } else { if (a > -10) { a += 2; } } // 改写 a > 0 ?(a < 10 ? a++ : a--) :(a > -10 ? a += 2 : null )
1.6.1.2 switch case
适用于一个变量在不同值情况下的不同操作
语法:
switch(变量){
case(不同值):
条件成立要执行的代码;
break;
...
default:
以上条件都不成立要执行的代码;
}
-
每一种 case 情况结束后最好都加上 break
-
default等价于 else,以上都不成立干的事情
-
如果不加 break,当前条件成立执行完成后,后面条件不论是否成立都要执行,直到遇到 break 或 default 为止
-
对不加 break 的应用,可以实现在不同值的情况下做相同的事.
-
switch 的相等
每一种 case 情况的比较用的都是 === '绝对相等'
- == VS ===
== : 相等
-
相等的运算方法是,如果左右两边数据值类型不同,想默认先转换为同样的类型,然后再进行比较
-
除了对象和字符串,其余都要转换为 number 类型进行比较
对象==对象的时候,如果引用地址相同,就相等,如果引用地址不同就不等
对象==数字类型的时候,都先转换为数字,再比较
对象==字符串类型的时候,把对象转换为字符串,再进行比较
对象==布尔数据类型的时候,都先转换为数字,在比较
数字==字符串,都先转换数字类型,再比较
数字==布尔,都先转换为数字类型,再比较
字符串==布尔,都先转换为数字类型,再比较
=== : 绝对相等
-
绝对相等的运算 : 如果类型不一样,肯定不相等,不会默认转换数据类型
-
绝对相等 : 类型和值都相等
-
项目中为保证业务严谨,推荐使用 ===
//一个值在不同情况下的不同操作
let a = 10;
if (a == 1) {
console.log(1);
} else if (a == 5) {
console.log(2);
} else if (a == 10) {
console.log(3);
} else {
console.log(4);
}
// 最终打印 3
// 这种需求可以使用 switch case
switch(a){
case 1:
console.log(1);
break;
case 5:
console.log(2);
break;
case 10:
console.log(3);
break;
default:
console.log(4);
}
// 最终打印 3
=================================================
// 如果不加 break
switch(a){
case 1:
a++;
case 5:
a += 2;
break;
default:
a-- ;
}
// 最终输出 4
=================================================
// 不加 break 应用
switch(a){
case 1:
case 5:
a += 2;
break;
default:
a-- ;
}
// 输出 3
let a = '5';
if (a == 1) {
console.log(1);
} else if (a == 5) { // => '5' 转换为 number 5 ==> true
console.log(2);
} else {
console.log(4);
}
// 输出 2
switch (a) {
case 1:
console.log(1);
break;
case 5: // 此处'5' case 5 => false
console.log(2);
break;
default:
console.log(4);
}
// 输出 4
1.6.2 循环语句
循环就是重复做某事
常用循环语句 :
-
for 循环语句
-
for in 循环语句
-
for of 循环语句 (ES6 新增)
-
while 循环语句
-
do while 循环语句
-
注意 forEach 是方法,不是循环语句
1.6.2.1 for 循环语句
-
for 循环的语法有四部分
1. 创建循环初始值 2. 设置(验证)循环执行条件 3. 条件成立执行循环体中的内容 4. 当前循环结束执行步长累计操作 2. 3. 4. ... 2. 3. 4. 不满足 2 循环结束
<script>
for (var i = 0 ; i < 5 ; i++){
console.log(i); // 0 1 2 3 4
}
console.log(i); // 5
</script>
循环与判断一起
for (var i = 10 ; i > 4 ; i -= 2){
if(i < 7) {
i++ ;
} else{
i--;
}
}
console.log(i); // 4 循环两次
- 循环体当中的两个关键词
-
continue
- 结束当前本次循环(continue 后面的代码不再执行),继续执行当前循环的下一轮
-
break
- 强制结束整个循环(break 后面代码也不执行),整个循环啥也不干直接结束
练习
<script>
for (var i = 0 ; i < 10 ; i++){
if(i >= 2){
i += 2; // i => 4 进入下一轮累计步长 => 7 进入下一轮累计步长 => 10 进入下一轮累计步长
continue;
}
if(i >= 6){
i--;
break;
}
i++;
console.log(i); // 1
}
console.log(i); //11
</script>
<script>
for (var i = 0 ; i < 10 ; i++){
if(i >= 2){
i += 2; // i => 4
break;
}
if(i >= 6){
i--;
continue;
}
i++;
console.log(i); // 1
}
console.log(i); //4
</script>
1.6.2.2 for in 循环语句
for in 循环: 用来循环遍历对象中的键值对, 适用continue和break
背景:
var obj = {
name : '小明',
age : 10,
height: 160,
1:60,
2:80,
3:99
}
// 想要将属性挨个输出 除了console.log(属性名)这种方法
- 语法
for(var 变量(key) in 对象){
// ...;
}
- 特点:对象中有多少键值对,循环就执行几次
// 对象中有多少键值对,循环就执行几次,除非break结束
// 每次循环key变量存储的值:当前对象的属性名
// 获取属性值 obj[key]
for(var 变量(key) in 对象){
console.log(key);
}
- 优先遍历数字属性名,且按照从小到大排列