零基础也能玩转javascript——(三)了解分支-爱代码爱编程
一、三目运算符(三元运算符)
if双分支有一种简写方式:条件 ? 条件成立时运行的代码段 : 条件不成立时运行的代码段
a>b ? console.log(a) : console.log(b)
这种表达双分支的方式叫做三元运算,也叫做三目运算
特点:
可以将整个表达式当做一个值,可以赋值给一个变量,也可以输出
缺点:
(1)格式死板;
(2)代码功能有限;
(3)判断功能有限;
// 案例1:判断两个变量之间的大小
var a = Number(prompt('输入第一个值'))
var b = Number(prompt('输入第二个值'))
if(a>b){
alert('a比b大')
}
else{
alert('b比a大')
}
// 三元运算符可以简写成以下
a>b ? alert('a比b大') : alert('b比a大')
// 案例2:判断三个变量之间的大小
var a = Number(prompt('请输入第一个数'))
var b = Number(prompt('请输入第二个数'))
var c = Number(prompt('请输入第三个数'))
if (a > b) {
if (a > c) {
alert('a是最大值')
} else {
alert('c是最大值')
}
} else {
if (b > c) {
alert('b是最大值')
} else {
alert('c是最大值')
}
}
// 三元运算符可以简写成以下
alert(a>b ? (a>c ? 'a是最大值' : 'c是最大值') : (b>c ? 'b是最大值' : 'c是最大值'))
//案例练习
// 第一题:使用switch语句判断成绩的等级 0~60不及格 60~70及格 70~80丙 80~90乙 90~100甲
// 第二题:开发一款软件,根据公式(身高-108)*2=体重,可以有10斤左右的浮动。来观察测试者体重是否合适
// 第三题:输入一个数字日期,判断这个日期是这一年的第几天 例如:20160211,计算后结果为42
// 第四题:输入一个三位数,判断是否是水仙花数 (每一位的数字立方和等于这位数本身 例如 153 = 1^3+5^3+3^3)
// 第五题:小明学习js用了7896709887秒。问:共多少天,多少小时,多少分钟,多少秒?
案例答案
// 第一题
var score = prompt("输入分数:");
score = parseInt(score / 10)
switch(score){
case 10:
case 9:
alert('优秀')
break;
case 8:
alert('良好')
break;
case 7:
alert('一般')
break;
case 6:
alert('及格')
break;
default:
alert('挨打')
}
// 第二题
var height = Number(prompt("请输入身高:"));
var weight = Number(prompt("请输入体重:"));
var res = (height - 108) * 2
if(height<=100){
alert('你太小了,不适合用这个公式进行计算')
}
else if(weight>=300){
alert('你太小了,不适合用这个公式进行计算')
}
else{
if(res-weight>=-10 && res-weight<=10){
alert('你的身材还阔以')
}
else{
alert('需要锻炼了')
}
}
// 第三题
var year = Number(prompt('请输入年份:'))
var month = Number(prompt("请输入月:"))
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
alert('这个月有31天')
break;
case 4:
case 6:
case 9:
case 11:
alert('这个月有30天')
break;
case 2:
if(year%4==0&&year%100!=0 || year%400==0){
alert('这个月的天数是29天')
}
else{
alert('这个月的天数是28天')
}
break;
default:
alert('当前输入有误')
}
// 第四题
var num = Number(prompt('请输入三位正数:'));
if(num>=100&&num<=999){
var a = parseInt(num / 100 )
var b = parseInt(num / 10 % 10)
var c = num % 10
if(a*a*a+b*b*b+c*c*c==num){
alert('YES')
}
else{
alert('NO')
}
}
else{
alert('请输入三位数')
}
// 第五题
var allSeconds = 7896709887;
var day = parseInt(allSeconds / 60 / 60 / 24)
var hour = parseInt(allSeconds / 60 / 60 % 24)
var miu = parseInt(allSeconds / 60 % 60)
var sec = allSeconds % 60
console.log('学习js花了'+ day+'天'+hour+'小时'+ miu+'分钟'+sec+'秒')
二、if
(一)、if单分支:只有一个条件,条件成立,执行语句,否则不执行
// 单分支语法
if(条件表达式){
当条件表达式的结果为true的时候要执行的代码
}
// 案例:判断年龄
var age;
if(age>18){
alert("已经成年了");
}
(二)、if双分支:有两个条件,条件成立,执行语句1,条件不成立,执行语句2
// 双分支语法
if(条件表达式){
当条件表示式的结果为true的时候要执行的代码
}else{
当条件表达式的结果为false的时候要执行的代码
}
// 案例:根据年龄判断是否成年
if(age>18){
alert("成年了");
}else{
alert("未成年");
}
(三)、if多分支:条件成立,执行语句1,不成立则有多种选择
// 多分支语法
if(条件表达式1){
当条件表达式1的结果为true的时候,要执行的代码
}else if(条件表达式2){
当条件表达式2的结果为true的时候,要执行的代码
}else if(条件表达式3){
当条件表达式3的结果为true的时候,要执行的代码
}
// 案例:判断考试成绩
var score = Number(prompt("请输入考试成绩:"));
if(isNaN(score)){
alert("输入不正确");
}else{
if(score>=0 && score<60){
alert("不及格");
}else if(score>=60 && score<70){
alert("及格了");
}else if(score>=70 && score<80){
alert("丙");
}else if(score>=80 && score<90){
alert("乙");
}else if(score>=90 && score<=100){
alert("甲");
}else{
alert("输入不正确");
}
}
(四)if分支嵌套(多条件):分支进行嵌套使用 表示有多种选择
如果多个条件是递进关系,就可以采用如下方式实现:
1.嵌套
在if 或 else 语句中,又出现了一个完全独立的if或else语句,称为嵌套if
// 分支的嵌套
if(条件1){
if(条件2){
满足条件1和条件2才会执行这里的代码
}
else{
满足了条件1但是没有满足条件2执行这里的代码
}
}
// 案例:判断多个变量的最大值
var a,b,c;
if(a>b){
if(a>c){
alert("变量a最大");
}else{
alert("变量c最大");
}
}else{
if(b>c){
alert("变量b最大");
}else{
alert("变量c最大");
}
}
//if分支的小细节
// 细节1:if条件的结果是布尔值,所以可以将布尔值当做条件放入if的小括号中
if(true){
alert("真的");
}else{
alert("假的");
}
// 细节2:如果将别的非布尔值的表达式或数据放入条件小括号中,会发生隐形的类型转换
if(2){ // 这里的2被转换成了布尔型
console.log(2);
}
2.逻辑运算符
if(cls==1 && sex=="男"){
console.log("矿泉水");
}else if(cls==1 && sex=="女"){
console.log("农夫山泉");
}
注意事项:
js会自动采用Boolean对if中的条件进行转换
例如:
if(0)等价于if(Boolean(0)) 即 if(false)
if(5)等价于if(Boolean(5)) 即 if(true)
二、switch分支语句
定义:switch:控制开关,是另一种分支语句,也可以叫做多路判断、case穿透
(一)、格式
swich(变量){
case 情况1:语句1;break;
case 情况2:语句2;break;
...
default:其它语句;
}
(二)、原理
先把变量中的数据拿来和case后的数据进行恒等比较,如果相等,就执行case后面的语句,直到遇到break或整个switch执行完成为止。
(三)、指令
1.default:case 没有列举到的其他情况
2.break:跳出他所在的switch和循环代码块
switch(money){
case 1:console.log("内容");break;
case 2:console.log("内容");break;
case 3:console.log("内容");break;
case 4:console.log("内容");break;
default:console.log("内容");
}
//注意:使用多路判断的时候,能使用switch进行判断,就尽量使用switch,因为switch的判断都是确定的值,条件比较简单,所以效率高
if和switch 的使用场合
二者可以通用
- 如果判断的条件比较复杂,使用if分支
- 条件是确定的值,分两种情况:
- 如果判断的分支小于等于3个,就使用if,这时候的效率和switch一样
- 如果大于3个,就使用switch。
3.switch判断使用的是全等于(===)
条件是点(具体的值),switch简单
条件是范围,if简单
//注意:点用switch,范围用if。
// 案例1:使用if分支判断是闰年还是平年
var year = prompt('请输入年份')
year = Number(year)
if(year % 400 ==0){
alert('世纪闰年')
}
else if(year % 4 ==0 && year % 100 !=0){
alert('普通闰年')
}
else{
alert('平年')
}
// 案例2:使用if分支判断分数的成绩等级
var num = Number(prompt('请输入您的分数'))
if(num>=90&&num<=100){
alert('起飞~')
}
else if(num>=80&&num<90){
alert('准备起飞')
}
else if(num>=70&&num<80){
alert('良好')
}
else if(num>=60&&num<70){
alert('继续努力')
}
else{
alert('不及格 回家男女混合双打')
}
// 案例3:使用switch判断某个月有多少天(不写break就是case穿透)
var year = Number(prompt('请输入年份:'))
var month = Number(prompt("请输入月:"))
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
alert('这个月有31天')
break;
case 4:
case 6:
case 9:
case 11:
alert('这个月有30天')
break;
case 2:
if(year%4==0&&year%100!=0 || year%400==0){
alert('这个月的天数是29天')
}
else{
alert('这个月的天数是28天')
}
break;
default:
alert('当前输入有误')
}