js有三种流程结构,顺序、选择、循环。
顺序结构:默认的流程结构。按照书写顺序从上至下执行每一条语句。
比如我们的html文档就是常见的顺序流程结构,浏览器默认从上往下渲染页面。
比如我们在加载外部文件的时候,如果后面加载的文件需要使用前面某个文件的组件或者函数,要确保加载顺序,否则调用不成功。
除了一条道走到黑之外,还是可以在岔路口进行选择的,只要通过了测试,符合了条件,就晋级到一条流金大道,否则请左拐,有另一个侧门供你通行,甚至连门都没有。有可能设置了好多关卡,但是永远最多只有一个关卡可以通行。
这就是if条件选择流程结构。
选择有单分支,双分支,多分支,也就是成功了当然通过,失败了该怎么办的问题。
if语句
if……else语句
三元运算符
if……else if……语句
if语句的嵌套
switch语句
1、if语句
这是最简单的单分支选择。
if(条件){
成功后要搬的砖;
}
成功失败都要继续搬砖;先来讨论一下什么情况下才能成功通过条件判断。
当条件表达式返回的结果为true的时候。
哪些表达式能返回真呢?
比较运算符,逻辑运算符构成的表达式都能返回true或者false的逻辑值。
比如num>18&&num<25,!isNaN(num)等等。
但是js的隐式转换真的无处不在,有些小坑我们也要知道。
if(0){};//0会被Boolean(0)隐式转成false。
if(1){};//1会被Boolean(1)隐式转成true。Boolean()会对所有的类型进行转换,得到布尔值。
number数字类型:只有0和NaN转成false,其它数字都是true。
string字符串类型:只有空字符串转成false,其它非空字符串都转成true。
object对象类型:只有null转成false,其它对象都是true。包括[],{}。
undefined肯定是false了。
var num=88;
if(num>=60){
console.log("你通关了");
}2、if……else语句
有了一个else,那就是说明条件不成立还是有条退路的。
var sex="女";
if(sex=="女"){
console.log("欢迎来到beauty's world");
}else{
console.log("请重新做人");
}对于上面这种双分支选择结构,可以考虑用更简单的三元运算符解决。
3、三元运算符
(条件)?语句1:语句2;
问你呢,条件成立吗?成立了就执行语句1,不成立执行语句2。
var age=35; (age<18)?"回家找妈妈":"你终于独立了";
4、if...else if...语句
多分支的意思,就是说条条道路通罗马,不要在一棵树上吊死,这个条件不成立,还可以试试第二个条件,还不成立,还可以再试,直到通关为止,或者终于明白自己没那个命。哈哈。
if(条件1){
条件1成立时执行的代码}
else if(条件2){
条件2成立时执行的代码}
...
else if(条件n){
条件n成立时执行的代码}
else{
条件1、2至n不成立时执行的代码}var myage =99;//老早的年龄为99
if(myage<=44)
{document.write("青年");}
else if(myage<=59)
{document.write("中年人");}
else if (myage<=89)
{document.write("老年人");}
else
{document.write("长寿老年人");}你只能满足一个他条件或者一个条件都不满足。ps:不知道活到99还有没有生命的乐趣:)
5、if语句的嵌套
这个if语言的嵌套和多分支还是有点区别的。
多分支是平行结构。这个是嵌套结构。
if(条件){
if(条件){
执行语句;
}
else if(条件){
执行语句;
}
...
}
else{
}//某个公司要给员工发年终奖,工作时间越长,发的越多,规则如下:
//工作未满1年,发月薪的0.5倍年终奖。
//工作满1年,发月薪的1倍年终奖,如果月薪大于8000则发1.2倍;
//工作满2年,发月薪的1.5倍年终奖,如果月薪大于10000则发2倍;
//工作满3年以上,发月薪的3倍年终奖,如果月薪大于12000则发3.5倍;
//用JS编写程序,让用户输入工作几年,可以输入0,然后输入月薪,计算年终奖。
<script type="text/javascript">
//输入工作年限和月薪
var year=parseInt(prompt("请输入工作年限,可以输0"));
var salary=parseInt(prompt("请输入你的月薪"));
//判断
if(year>=3){
//工作满3年以上
if(salary>12000){
var bonus=salary*3.5;
}else{
var bonus=salary*3;
}
}else if(year>=2){
//工作满2年以上
if(salary>10000){
var bonus=salary*5;
}else{
var bonus=salary*1.5;
}
}else if(year>=1){
//工作满1年
if(salary>8000){
var bonus=salary*1.2;
}else{
var bonus=salary*1;
}
}else if(year<1){
//工作未满1年
var bonus=salary*0.5;
}
alert("你会有"+bonus+"元年终奖");
</script>关于多分支if和嵌套if的性能,其实短短几个条件并没有多大差别,相对来说,平行的多分支if比嵌套if理解上面更通畅一些。
6、switch语句
在某个变量有多个值的情况下进行判断,用switch更好一些。
注意:switch 语句与 if 语句不同的是,switch 语句只能够测试是否相等,因此,case 语句后面只能是整型或字符型的常量或常量表达式;而在 if 语句中还能够测试关系与逻辑表达式。
switch(表达式){
case 值1:
//...;
break;
case 值2:
//...;
break;
...
default:
//...;
}先计算出表达式的值,这个值是一个能判断是否相等的常量值。
将表达式的值与每种情况的值进行比较。
如果匹配,则执行相关的代码块。如果有break则跳出程序,没有break则继续往下执行。
如果不匹配任何case的值,则执行default默认情况。
//getDay()返回0-6的值,用来表示星期几。0表示星期天,1表示星期一,以此类推。
const today=new Date().getDay();
switch (today) {
case 0:
day = "Sunday";
break;
case 1:
day = "Monday";
break;
case 2:
day = "Tuesday";
break;
case 3:
day = "Wednesday";
break;
case 4:
day = "Thursday";
break;
case 5:
day = "Friday";
break;
default:
day = "Saturday";
}
document.write(day);当然,也可以用数组的方法解决上面的问题,更简单一些。
var oH1=document.querySelector("h1");
// new Date()可以创建一个系统时间的具体实例对象。
var myDate=new Date();
// 利用创建好的实例来获取系统当前的星期几。返回的是0-6的值。0表示星期天,1表示星期一。
var myday=myDate.getDay();
// console.log(myday);
var weekdays=["星期天","星期一","星期二","星期三","星期四","星期五","星期六"];
oH1.innerHTML="今天是:"+weekdays[myday];所以,switch适合一个变量有多个值的情况,if适合有条件或逻辑的情况。
如果忘记了break则会让程序继续往下执行。
var foo = 0;
switch (foo) {
case -1:
console.log('negative 1');
break;
case 0: // foo 的值为 0 所以匹配这里所以这一块会运行
console.log(0);
// 注意:那个没写的 break 原本在这儿
case 1: // 'case 0:' 里没有 break 语句所以这个 case 也会运行
console.log(1);
break; // 遇到了这个 break 所以不会再继续进入 'case 2:' 了
case 2:
console.log(2);
break;
default:
console.log('default');}default也不一定非要放在最后,虽然那是最好的位置,只要没有找到匹配项,程序就会去找default。
var foo = 5;
switch (foo) {
case 2:
console.log(2);
break; // 遇到这个 break 所以不会继续进入 'default:'
default:
console.log('default')
// 掉到下面
case 1:
console.log('1');}用switch代替if语句,如果此时表达式只有一个值也是可以的。
var a = 100;
var b = NaN;
switch (true) {
case isNaN(a) || isNaN(b):
console.log('NaNNaN');
break;
case a === b:
console.log(0);
break;
case a < b:
console.log(-1);
break;
default:
console.log(1);}多 case - 单一操作
如果 case 语句之下没有 break ,它将继续执行下一个 case 语句,而不管 case 是否符合条件。
这是一个单操作顺序的 switch 语句,其中四个不同值的执行结果完全一样。
var Animal = 'Giraffe';
switch (Animal) {
case 'Cow':
case 'Giraffe':
case 'Dog':
case 'Pig':
console.log('This animal will go on Noah\'s Ark.');
break;
case 'Dinosaur':
default:
console.log('This animal will not.');}多 case - 关联操作
var foo = 1;
var output = 'Output: ';
switch (foo) {
case 10: //Output: So What Is Your Name?
output += 'So ';
case 1: //Output: What Is Your Name?
output += 'What ';
output += 'Is ';
case 2: //Output: Your Name?
output += 'Your ';
case 3: //Output: Name?
output += 'Name';
case 4: //Output: ?
output += '?';
console.log(output);
break;
case 5: //Output:!
output += '!';
console.log(output);
break;
default: //foo is NaN or not 1, 2, 3, 4, 5 or 10 Please pick a number from 0 to 6!
console.log('Please pick a number from 0 to 6!');}还可以在case表达式中进行一些运算:
var i = 3;
switch (i) {
case ( (i>=0 && i<=5) ? i : -1 ):
console.log('0 ~5');
break;
case 6: console.log('6');}

发表评论:
◎请发表你卖萌撒娇或一针见血的评论,严禁小广告。