条件分支语句

条件分支语句,也叫作条件判断语句,就是根据某种条件执行某些语句,不执行某些语句。

JS中有三种语法是可以表示条件分支的。

1.if……else……

条件分支的主力语法,这个主力语法能够书写所有的条件分支语句。也就是说,一会儿我们学switch case语句,switch case语句能干的,if else语句一定也能干。

昨天已经讲过了,复习一下:

标准的完整结构:

if(){

}else if(){

}else if(){

}else{

}

else只能有一个,并且一定要放在最后。表示所有的分支都不满足的时候执行的事情。

可以没有else:

if(){

}else if(){

}else if(){
}
可以没有分支:
if(){ }

看准楼的位置:

if(8 > 5){
console.log("哈哈");
}
console.log("嘻嘻"); //这行语句不在if里,所以不管if成功没有,都执行

如果只有一行语句,那么就可以省略大括号:

if(8 > 15)
console.log("哈哈");
console.log("嘻嘻");

跳楼现象,要会合理利用,比如今天早上的bmi晨早测验!

var a = 4;
if(a < 8){
a++; //a变为5,然后跳楼,不会进行下面的a==5的比较了
}else if(a == 5){
a++;
}
console.log(a); //5

2.switch case语句

先来看一个简单的例子:

switch(xingzuo){
case "白羊座" :
alert("今天要注意调整自己的状态,有些人的睡眠质量比较差");
break;
case "金牛座" :
alert("今天会在感情方面遇到一些小小的问题");
break;
case "双子座" :
alert("要做好心理准备会在工作上被他人挑剔找茬,这是你避免不了的事情");
break;
case "巨蟹座":
alert("工作上要打醒十二分精神,要不然很大可能会经常要返工哦");
break;
case "狮子座":
alert("恋爱中的人今天的心有点摇摆不定,有人可能会有精神上的出轨");
break;
default :
alert("对不起,我们没有收录你的星座运势!");
break;
}

语法:

switch(待检测值){
case 值1 :
值1 与 待检测值 相同时做的事情
break;
case 值2 :
值2 与 待检测值 相同时做的事情
break;
case 值3 :
值3 与 待检测值 相同时做的事情
break;
default :
默认要做的
break;
}

switch case语句的哲学是什么?存在的意义,简化了if……else……的书写:

你会发现,下面的if语句的分支中,都是在判断xingzuo是不是和某一个字符串相等,显得臃肿:

if(xingzuo == "白羊座"){
alert("今天要注意调整自己的状态,有些人的睡眠质量比较差");
}else if(xingzuo == "金牛座"){
alert("今天会在感情方面遇到一些小小的问题");
}else if(xingzuo == "双子座"){
alert("要做好心理准备会在工作上被他人挑剔找茬,这是你避免不了的事情");
}else if(xingzuo == "巨蟹座"){
alert("工作上要打醒十二分精神,要不然很大可能会经常要返工哦");
}else if(xingzuo == "狮子座"){
alert("恋爱中的人今天的心有点摇摆不定,有人可能会有精神上的出轨");
}else{
alert("对不起,我们没有收录你的星座运势!");
}

我们经过测试,发现switch进行相同判断,底层是===的比较,连类型一起比较

<script type="text/javascript">
var a = "5";
switch(a){
case 5 :
alert("哈哈"); //不会弹出!!因为类型不一样
break;
}
</script>

如果不写break,那么switch语句就表现的非要有意思,除了执行这个case里面的语句之外,还将无条件的执行下面的case的语句,直到遇见一个break拦住它。

var a = 5;
switch(a){
case 4:
alert("我是4"); //没有通过验证,不执行
case 5:
alert("我是5"); //弹出
case 6: //无视这行case,直接直接这行case里面的语句
alert("我是6"); //弹出,
break; //挡住了,就不能继续往下运行了
case 7:
alert("我是7");
break;
default:
alert("我是默认");
}

//用户输入月份,告诉它这个月有几天

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:
alert("这个月一般来说是28天,可能29天");
}

初学者最最可爱的错误是:

switch(month){
case 1 || 3 || 5 || 7 || 8 || 10 || 12 :
alert("这个月有31天");
break;
case 4 || 6 || 9 || 11 :
alert("这个月有30天");
break;
default :
alert("我是默认");
}

这样写不行的!因为1 || 3 || 5 || 7叫做表达式,计算机一遇见表达式,就会计算求值

1 || 3 || 5 || 7 || 8 || 10 || 12

表达式的值是1,等价于case 1:

switch这个语句,就只能干这种事儿。就是把一个值,看情况得几,执行不同的事儿。

如果要在某一个范围内,做某件事儿,也行,不过不建议这么写。此时应该用if……else if……

switch(true){
case score < 60 :
alert("不及格");
break;
case score < 75 :
alert("及格");
break;
case score < 85 :
alert("良好");
break;
case score <= 100 :
alert("优秀");
break;
default :
alert("你输入的成绩错误");
}

3.三元运算符

? :是一组运算符,这是JS中唯一一个需要三个元素参加的运算符。

条件 ? val1 : val2

表达式的值,要看条件是true还是false。如果条件是true,那么表达式的值就是val1。如果条件是false,表达式的值就是val2。

简单的例子:

console.log(true ? 3 : 8);	//3
console.log(false ? 3 : 8); //8

三元运算符,经常这么使用:

员工的年终奖倍数,跟月薪有关。月薪大于8000,系数就是1.2。否则是1。

var xishu = salary > 8000 ? 1.2 : 1;

等价于:

if(salary > 8000){
xishu = 1.2;
}else{
xishu = 1;5 }

现在总结一下,条件分支的语句一共有3种,但是&& ||短路写法也有一种选择的感觉,总共算4种。

if……else if…… (必须立即想到!这个东西无敌)

switch case (某一方面很擅长,体现在了代码的清晰度上)

三元运算符 (赋值的时候,根据条件有两个可能的值,马上想到三元运算符)

&&短路写法 (经验问题,用的不熟悉没事)

循环语句

JS中流程控制的语句,就两个:条件分支、循环语句。靠这两种语句,就能完成所有的程序。

循环语句是一系列反复执行直到符合特定条件的命令。

循环语句能够解决大量的类似语句书写。

1.for循环语句

整体感知:

for(var i = 1 ; i <= 99 ; i++){
console.log("第" + i + "次说我爱你");
}

你就发现了,for循环就是一个壳子,让变量i依次、轮流的值为1、2、3、4、……99。

变量i我们称为循环变量,这个变量可以任意设置,我们习惯用i来表示循环变量

语法上,最最容易错误的,最后没有分号:

for(var i = 1 ; i <= 99 ; i++;){ ← 错误的写法

console.log("第" + i + "次说我爱你"); 3 }

for循环的本质,必须搞清楚。

系统遇见了for循环结构,会立即执行语句①,此时声明了一个变量i,赋值为1。

系统会立即检测,是否满足②这个条件表达式,如果是真,则执行③;如果②是假,则跳出循环,执行语句⑤。

执行完③之后,系统会立即执行语句④,然后再次检测语句②,如果为真,则做③,如果为假,则做⑤;

执行完③之后,系统会立即执行语句④,……

2.穷举思想

我们初学者,最最关键的,就是掌握for循环的穷举思想。

比如,现在要寻找48的所有约数。

什么是约数: a ÷ b 没有余数,能整除。那么我们称a是b的倍数,称b是a的约数。

计算机是笨笨的,不能立即告诉你48能整除哪些数,所以,我们就要让计算机从1开始,一个一个实验。

我们试试1是不是48的约数

我们试试2是不是48的约数

我们试试3是不是48的约数

……

我们试试48是不是48的约数

把所有的可能性一一列出,然后筛选。全举法,举就是列举的意思。中文比较文绉绉,穷举法。

欲穷千里目,更上一层楼。

比如,我们现在要寻找水仙花数。水仙花数,是三位数,每个数位的立方和等于它本身。

比如153, 因为13+53+33 = 1 + 125 + 27 = 153。所以153就是水仙花数。

寻找100~999的所有水仙花数。

穷举法,从100~999,一个一个试,

我们试试100是不是水仙花数

我们试试101是不是水仙花数

我们试试102是不是水仙花数

我们试试103是不是水仙花数

……

我们试试999是不是水仙花数

for循环,还有一个小应用,叫做累加器。

比如,我们现在想计算1+2+3+4+……100

var sum = 0;  //累加器
for(var i = 1 ; i <= 100 ; i++){
sum = sum + i;
}
console.log(sum);

计算6!

var sum = 1;   //累乘器,累乘器的初值是1
for(var i = 6 ; i >= 1 ; i--){
sum = sum * i;
}
console.log(sum);

如果一个数恰好等于它的因数之和,则称该数为“完美数”。

例如:

第1个完全数是6,它有因数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第2个完全数是28,它有因数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。

试寻找1~10000之间的所有完美数。

for(var i = 1 ; i <= 10000 ; i++){
var sum = 0;
for(var j = 1 ; j <= i ; j++){
if(i % j == 0 && i != j){
sum+=j;
}
}
if(i==sum){
console.log("完美!"+i);
} }

13_JavaScript基础入门(3)的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. 「译」JUnit 5 系列:基础入门

    原文地址:http://blog.codefx.org/libraries/junit-5-basics/ 原文日期:25, Feb, 2016 译文首发:Linesh 的博客:JUnit 5 系列: ...

  3. .NET正则表达式基础入门

    这是我第一次写的博客,个人觉得十分不容易.以前看别人写的博客文字十分流畅,到自己来写却发现十分困难,还是感谢那些为技术而奉献自己力量的人吧. 本教程编写之前,博主阅读了<正则指引>这本入门 ...

  4. 从零3D基础入门XNA 4.0(2)——模型和BasicEffect

    [题外话] 上一篇文章介绍了3D开发基础与XNA开发程序的整体结构,以及使用Model类的Draw方法将模型绘制到屏幕上.本文接着上一篇文章继续,介绍XNA中模型的结构.BasicEffect的使用以 ...

  5. 从零3D基础入门XNA 4.0(1)——3D开发基础

    [题外话] 最近要做一个3D动画演示的程序,由于比较熟悉C#语言,再加上XNA对模型的支持比较好,故选择了XNA平台.不过从网上找到很多XNA的入门文章,发现大都需要一些3D基础,而我之前并没有接触过 ...

  6. Shell编程菜鸟基础入门笔记

    Shell编程基础入门     1.shell格式:例 shell脚本开发习惯 1.指定解释器 #!/bin/bash 2.脚本开头加版权等信息如:#DATE:时间,#author(作者)#mail: ...

  7. [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

    前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...

  8. [Spring框架]Spring AOP基础入门总结一.

    前言:前面已经有两篇文章讲了Spring IOC/DI 以及 使用xml和注解两种方法开发的案例, 下面就来梳理一下Spring的另一核心AOP. 一, 什么是AOP 在软件业,AOP为Aspect ...

  9. RobotFramework - 基础入门

    Robot Framework Wiki HomePage Robot Framework User Guide Robot Framework documentation Robot Framewo ...

随机推荐

  1. uni-app同步缓存值 设置 读取 删除

    A页面 <view class="go-to-tab" @tap="gotologin"> 去login页面 </view> msg : ...

  2. week homework: 大家来找茬

    上周课程主题为用户体验,每位同学也根据自己使用APP的体验,例举出一些手机或电脑客户端软件的bug或用户体验非常不好的地方: Tianfu: GitHub.com:界面不够直观,有许多功能不知道入口在 ...

  3. nodejs一些比较实用的命令

    在学习node的时候是从express开始的,在express中有一个generate,如果在机器上面全局的安装了express-generate的话,可以直接实用[express project_n ...

  4. ajax ★ ★ ★ ★ ★

    ajax 1   定义:  是创建交互式应用的网页交互技术 2    特点:无刷新.异步 3  中介数据类型: 1)  XML - 可扩展的标记语言                          ...

  5. windows下常用快捷指令记忆

    快速打开环境变量窗口 sysdm.cpl --系统设置 快速打开远程桌面程序 mstsc ---Microsoft terminal services client 快速打开事件查看器 eventvw ...

  6. 大数据Hbase相关运维题

    1.启动先电大数据平台的 Hbase 数据库,其中要求使用 master 节点的RegionServer.在 Linux Shell 中启动 Hbase shell,查看 HBase 的版本信息.(相 ...

  7. SpringBoot系列(十)优雅的处理统一异常处理与统一结果返回

    SpringBoot系列(十)统一异常处理与统一结果返回 往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列 ...

  8. netcore 下的policy授权自定义返回结果

    目前一直在用policy做权限校验,但是好像组里需要将返回结果统一,之前用的都是直接继承AuthorizationHandler然后调用context.Fail(),但是这样会导致没办法自定义返回结果 ...

  9. shell脚本之awk(一)

     运维必备技能 概述: 1.awk是一种编程语言,用于linux/unix下对文本和数据进行扫描.处理数据来源:标准输入.文件.管道.  2.linux中常用的awk编译器版本有mawk,gawk.R ...

  10. Nagios基本搭建

    Nagios简述: 1.一款用来监视系统和网络的开源软件 2.利用其从多的插件实现对本机和远端服务的监控 3.当被监控对象异常时,回及时向管理员警告 4.提供一批预设好的监控插件,用户可以直接调用 5 ...