循环,三元表达式和switchcase
1复习if
//条件语句:
// 1. 单条件 if(bool){ 代码块 }
if (2 > 1) {
console.log('我觉得你大学不应该毕业~~~');
}
// 2. 二选一条件 if(bool){ if代码块 } else{ else代码块 }
// 如果 if小括号 中 的结果 是 true,就执行 if代码块 ,否则 执行 else 代码块
if (1 > 2) {
console.log('true');
} else {
console.log('false');
}
// 3. 多条件 if(bool) { 代码 } else if(bool){ 代码 } else if(bool) { 代码 } ..... else{ }
// 多条件中 ,如果 任意一个 if 的条件满足了,就执行 这个 if 的 代码块,后面的 判断 都不执行了,直接 执行 整个 if 结构 后面的代码!
var salary = 5000;
if (salary == 5000) {
console.log('每天吃 方便面~~~');
} else if (salary == 10000) {
console.log('每天吃 两包方面便~~~');
} else if (salary == 15000) {
console.log('每天吃 农家小炒肉~~~');
} else {
console.log('每天吃 麻辣烫~~~');
}
console.log('if 主要代码复习结束~~~~');
//4. if 嵌套 : 就在 if 的代码块 中 再写一个 if结构的代码
if (1 > 0) {
if (2 > 0) {
}else if(3 > 0){
}else{
}
}
2三元表达式
//1.三元运算符 ? : -》 条件 ? 代码1 : 代码2
//1.1 简化 二选一 if结构 --------------------------------------------------------------------
var usrName = '小苍苍';
// if (usrName == '小苍苍') {
// console.log('苍苍,我们一起去看电影好吗?');
// } else {
// console.log('美女,有机会一起看个电影呗~~~');
// }
// 如果 ? 前面 是 true,那么 就调用 : 前面的代码
// false, : 后面的代码
usrName == '小苍苍' ? console.log('苍苍,我们一起去看电影好吗?') : console.log('美女,有机会一起看个电影呗~~~');
//1.2 三元运算符 还可以 进行 二选一 的 赋值- ---------------------------------------------------
// 如果 ? 前面 是 true, 那么 就 将 : 前面的值 返回 给 变量 salary
// false, 那么 就将 : 后面的值 返回 给 变量 salary
var salay = usrName == '小苍苍' ? 500000 : 5000;
// if (usrName == '小苍苍') {
// salay = 500000;
// }
// else {
// salay = 5000;
// }
// 1 > 2 ? (1 < 2 ? 1 : 2) : 3;
3 switchcase
// 1. switch case 语法 主要用来 做 变量 判等 操作
// 注意:switch case 中 对变量做判等 用的是 全等号 === !
// 补充:case 后面 可以 放 任意类型的值 与 变量 进行判等 !
// switch(要进行判等的 变量) {
// case '值1':{
// case1 代码块~~~~
// break; // 退出 整个 switch 结构
// }
// case '值2':{
// case2 代码块~~~~
// break; // 退出 整个 switch 结构
// }
// case '值3':{
// case3 代码块~~~~
// break; // 退出 整个 switch 结构
// }
// default:{
// default 代码块~~~~
// }
// }
// == 值判断 两边的 值是不是一样
// === 判断 两边的值 也 会 判断 两边的 数据类型 是否一样!!
var usrName = '小班班';
switch (usrName) {
case '小波波': { // 相当于 if(usrName === '小波波')
console.log('亲,我可以亲你吗?');
break; // 跳出 switch 结构 ,执行 switch结构 后面的代码
}
case '小苍苍': {
console.log('亲,我可以抱你嘛?');
break;
}
case '小泽泽': {
console.log('亲,我可以带你去湘江边吗?');
break;
}
default: {
console.log('我不喜欢男的~~~~');
}
}
console.log('我是switch结构后面的代码~~~~');
// if(usrName == '小波波'){
// console.log('亲,我可以亲你吗?');
// }else if(usrName == '小苍苍'){
// console.log('亲,我可以抱你嘛?');
// }else if(usrName == '小泽泽'){
// console.log('亲,我可以带你去湘江边吗?');
// }else{
// console.log('我不喜欢男的~~~~');
// }
04switchcase break
//1.switch穿透:当 case 中 没有 写 break 来 退出 整个 swtich结构时,就叫做 switch穿透。
// 没写 break 的 case {} 代码结束后,会执行 下一个 case{} 代码块里的代码!!直到遇到 break 或 default 为止!!!
var usrName = '小波波';
switch (usrName) {
case '小波波': { // 相当于 if(usrName === '小波波')
console.log('亲,我可以亲你吗?');
// 注意 这里 没有 写 break;
}
case '小苍苍': {
console.log('亲,我可以抱你嘛?');
break;
}
case '小泽泽': {
console.log('亲,我可以带你去湘江边吗?');
break;
}
default: {
console.log('我不喜欢男的~~~~');
}
}
console.log('我是switch结构后面的代码~~~~');
//2. 合理使用switch 穿透 ----------------------------------------------
var usrYear, usrMonth, usrDay;
usrYear = parseInt(prompt('请输入年份:'));
usrMonth = prompt('请输入月份:'); // '1'
//2.判断是否为 大月
// 【强调】switch 中的 判等 是 === ,又判断 值,也判断 类型
switch (usrMonth) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: {
usrDay = 31;
break;
}
case 4:
case 6:
case 9:
case 11: {
usrDay = 30;
break;
}
case 2: {
if (usrYear % 400 == 0 || (usrYear % 4 == 0 && usrYear % 100 != 0)) {
usrDay = 29;
} else {
usrDay = 28;
}
}
default: {
alert('您输入的月份有误~~~可能您的身份不是地球人吧~~~');
}
}
//5.如果 usrDay 已经被赋值过了,就打印出来
if (usrDay != undefined) {
alert('【' + usrYear + '】年【' + usrMonth + '】月有【' + usrDay + '】天');
}
05 if else 和switch的应用场景
//1.if else
// if 小扩号中 可以 有 两种 代码
// 第1种: 直接 写 bool 值: true / false
// if(true){ }
// 第2种:写 最终能够 返回 一个 bool值的: > < == === .....
// && || !
// if(1 > 2){ }
// if(1 < 2 && 2 > 0 && 1 === 1){ }
// 第3中:隐式类型转换 ---- 补充 了解
// 0 -0 NaN '' null undefined 都会被 if 当成 false
// 其他 都会被 if 当成 true
//2. switch case 只有一种 代码可以 写在 switch中 : 变量 === 值1
// switch(变量){
// case 值1:{
//
// }
// }
06 while 循环
//1.循环语句
// 什么是循环: 重复的做 一样的事情!!!
// console.log('班长在通过视频学习~~~~');
// console.log('班长在通过视频学习~~~~');
// console.log('班长在通过视频学习~~~~');
// 循环的组成: a.要循环执行的代码
// b.循环条件 变量
// c.循环条件 判断 -- 需要 写明 退出 循环的条件
// d.条件变量 的修改 -- 向 退出循环的条件 做 努力(满足退出条件)
//1.1 while 循环 -----------------------------------------------------------------------------------
// 语法: 当 while后面() 中 的布尔值 为 true,就执行 { } 里的代码,
// false,就 结束 while 循环,执行 while循环 后面的代码!!
// while(bool){
// }
// 1.循环条件变量:要循环的次数
var count = 1;
// 2. 循环条件
while (count <= 3) { // count = 0 , 1 ,2 , 3
//3.循环体代码(需要重复做的事情)
console.log('班长在通过视频学习~~~~' + count);
//4.修改循环条件 变量
count += 1; // 相当于 count = count + 1
}
console.log('循环结构后面的代码!!!' + count);
07 do while循环
//2. do while 循环
// 会 先 将 循环代码 执行 一次,然后 再判断 是否要 进行下一次循环
// 先斩后奏
//案例:输出 1 - 5 之间的和
var num = 1; // 保存 循环次数
var sum = 0; // 保存 和 --- 箩筐变量
do {
console.log('num = '+num);
// num = 1,2,3,4,5
sum += num; // 将 num 里的数值 累加到 sum变量中!!
//sum = 1 + 2 + 3 + 4 + 5
num += 1; // num = num + 1
} while (num <= 5);
console.log('sum = ' + sum);
08 while 和do while的案例
//while循环 案例 -----------------------------------------------------------------------
//1.接收用户输入的年龄,要求必须是数值,如果不是,则提示重新输入
// var usrAge = parseInt(prompt('请输入年龄:')); // parseInt 转换数值时:如果 是 'aa' ,返回 NaN
// isNaN(usrAge) 如果 usrAge 是 非数值,就返回 true
// 数字化,就返回 false
// while (isNaN(usrAge)) {
// alert('对不起,你这个大sb,年龄怎么会是非数值呢?请重新操作!');
// usrAge = parseInt(prompt('请输入年龄:'));
// }
// alert('恭喜您,您的年龄为:【' + usrAge + '】');
//do while循环 案例 -----------------------------------------------------------------------
//2.接收用户名和密码,如果 等于 james 和 123 的话,则显示登陆成功~~~,如果 错误,就重新输入。
do{
var usrName = prompt('请输入用户名:');
var usrPwd = prompt('请输入用户密码:');
var isOk = usrName != 'james' || usrPwd != '123';
if(isOk){
alert('用户名或密码错误~~请重新输入~!');
}
}while(isOk); // 如果 任意一个 不正确,都重新 输入
alert('恭喜您[' + usrName + ']~~登陆成功啦~~!');
10 for 循环
// 循环的组成: a.要循环执行的代码
// b.循环条件 变量
// c.循环条件 判断 -- 需要 写明 退出 循环的条件
// d.条件变量 的修改 -- 向 退出循环的条件 做 努力(满足退出条件)
/*
循环步骤分解:
for (步骤1.var i = 1; 步骤2.i <= 10; 步骤4.i += 1) {
步骤3.console.log('i = ' + i);
}
执行先后顺序: 步骤1 步骤2 -> true,执行 步骤3 步骤4
步骤2 -> true,执行 步骤3 步骤4
步骤2 -> true,执行 步骤3 步骤4
步骤2 -> false, 就退出整个循环
*/
// 注意:一般循环,都是 为 i + 1,所以,可以 用 i++ 来代替 i+=1
// 但有时候,循环不是每次 +1 的,就需要用 i += 3,而不是 i++了
for (var i = 1; i <= 3; i++) { // i+=1 -> 相当于 i += 1 -> i = i + 1
console.log('i = ' + i);
}
console.log('循环结束后:i = ' + i);
11自增自减
//1. 复合赋值运算符
// += -= *= /=.....
var a = 1;
a += 12;// a = a + 12
var i = 1;
i+=1; // i = i + 1
//2.自增自减
// 只能 对 自己这个变量 做 +1 或 -1 的操作
var b = 1;
b++; // b+=1; -》 b = b + 1;
console.log(b); // 2
var c = 10;
c--; // c-=1; -》 c = c - 1;
console.log(c); // 9
12三个循环的应用场景
//1. 一般 【根据 非次数 条件】 来循环的 ,就用 while 或 do while----------------------
//1.1 while 是 先判断 再循环
// while(bool){ }
//1.2 do while 是 先执行一次,在判断 要不要进行下一次循环
//do{ }while(bool);
//小提醒: while(bool);{} 中的 ; 不要加!!!!
// do{ }while(bool); 最后的; 用来表示 语句结束,要加!!!
//2.【根据 次数 条件】来循环的,就用 for循环 ------------------------------------------
// for(var i = 0; i < 10;i++){
// console.log(i);
// }
13求最大值
//1.用 for 循环 求 1- 100 之间所有数的和
var sumNum = 0; // 箩筐变量,用来存放 所有数 的和
for (var i = 1; i <= 100; i++) {
console.log('i = ' + i);
sumNum += i; // 将 i 的值 累加到 变量 sumNum中
}
console.log(sumNum);
//2.用 for 循环 求 1- 100 之间所有偶数的和
var sumNum = 0; // 箩筐变量,用来存放 所有数 的和
for (var i = 1; i <= 100; i++) {
if (i % 2 == 0) {
console.log('i = ' + i);
sumNum += i; // 将 i 的值 累加到 变量 sumNum中
}
}
console.log(sumNum);
//3.用 for 循环 求 1- 100 之间所有奇数的和
var sumNum = 0; // 箩筐变量,用来存放 所有数 的和
for (var i = 1; i <= 100; i++) {
if (i % 2 != 0) {
console.log('i = ' + i);
sumNum += i; // 将 i 的值 累加到 变量 sumNum中
}
}
console.log(sumNum);
14求平均成绩和总成绩
//1.用户输入学生的人数,然后依次输入每一个学生的成绩,输入完毕后计算 平均成绩 和 总成绩
/*
思路步骤:
a.获取 学员的总人数 --> 10
b.使用 for 循环 接收 每位学员的成绩,并 累加到 “箩筐”变量中 -- 求 总成绩
c.求 平均成绩
*/
//1.总人数
var stuNum = parseInt(prompt('请输入学员总人数:'));
//2.循环 接收每位学员成绩,并累加到 总成绩变量中
var scoreTotal = 0;
for(var i = 1; i <= stuNum ; i++){
//2.1 接收 一位学员 的成绩
var stuS = parseInt( prompt('请输入第【' + i + '】位学员的成绩:') );
//2.2 累加到 总成绩中
scoreTotal += stuS;
}
//3.求平均成绩
var avgScroe = scoreTotal / stuNum;
alert('总人数【' + stuNum + '】,总成绩【' + scoreTotal + '】,平均分【' + avgScroe + '】');
15退出循环break和continue
//循环退出: 在循环执行的过程中,遇到特殊情况,可以 直接 退出循环!!! 或 退出 本次 循环!!!
//1.班长吃包子: 每天早上吃10个包子,第5个包子里 咬了一口后,发现 半只蟑螂!!!
// 扔掉第5个,继续从 第6个开始吃~~~ 吃到第10个结束!!
//2.班长 吃到 第 8个包子,发现已经吃饱了,就不再吃后面的包子了(退出整个循环!!!)
for(var i = 1; i <= 10; i++){
console.log('我是班长,正在吃第【' + i + '】个包子~~~');
if(i == 5){
console.log('我靠~~~~ 怎么有半只蟑螂呢?!!! 不吃了这个!!扔掉喂副班长~~!');
continue;// 【退出 本次循环】:从 continue 处 直接 调到 i++ 处运行!!!
}
if(i==8){
console.log('啊,吃的好饱啊~~~不吃了,再吃就拉了~~!');
break;
}
console.log('真好吃啊~~~!');
}
console.log('嗯,吃饱了~~~可以回家睡觉了~~!');
16双重循环嵌套
//1.使用 for循环 模拟 一周7天 上课的过程,每天 有 4节课~~~
//a. 先模拟 天
//b. 在模拟 每天里面的 4节课
for(var day = 1 ; day <= 7; day++){
console.log('啊~~~在传智播客充满激情的第【' + day + '】天开始了~~~');
for(var classNo = 1; classNo <= 4; classNo++){
console.log('哦~~~第【' + day + '】天的第【' + classNo + '】节课上课了~~~');
}
console.log('啊~~~在传智播客充满激情的第【' + day + '】天结束了~~~');
}
17循环嵌套打印三角形
/*在页面打印如下图案,.一次只能打印一颗星星
*
* *
* * *
* * * *
* * * * *
*/
// console.log('*');
// console.log('* *');
// console.log('* * *');
// console.log('* * * *');
// console.log('* * * * *');
//1.打印 五行,每行里 一个星星
//2.每一行中 打印 和 行数相同 的 星星个数(列数)
var strStar = '';
for(var row = 1 ; row <= 5; row++){
//2.2 在 每一行 中 循环生成 星星
for(var star = 1; star <= row; star++){
strStar += '* ';
}
strStar += '\n';
}
console.log(strStar);