条件分支语句

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

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. 使用Scanner接受用户键盘输入的值

    第一步导入Scanner import java.util.*; 第二步创建Scanner对象 Scanner input = new Scanner(System.in); 第二步创建Scanner ...

  2. CSS也能计算:calc

    举个例子ul li适配屏幕,如果加个border:1px,不用border-content得情况下,每个li多加了2px: <ul><li></li><li& ...

  3. 利用SSIS进行SharePoint 列表数据的ETL

    好几年前写了一篇<SSIS利用Microsoft Connector for Oracle by Attunity组件进行ETL!>,IT技术真是日新月异,这种方式对于新的SQL SERV ...

  4. A - Chat Group Gym-101775A

    题目连接:https://codeforces.com/gym/101775/problem/A 题解:就是累加组合数 但是直接由K累加到N肯定会TLE ,所以我们不妨判断不能组成group的情况,即 ...

  5. Des对称可逆加密

    /// <summary> /// DES AES Blowfish ///  对称加密算法的优点是速度快, ///  缺点是密钥管理不方便,要求共享密钥. /// 可逆对称加密  密钥长 ...

  6. 通达OA-2017版本漏洞复现

    搭建环境 服务器 虚拟机系统版本:Windows Server 2016. 安装服务端 1.下载安装程序 这里我们下载的是2017版本的通达OA服务端: 2.安装程序 配置服务: 漏洞复现 1.任意文 ...

  7. CentOS 7.4 安装网易云音乐

    1.下包–>网易云音乐 Ubuntu14.04(推荐14.04依赖包网上能找到) 提示:16.04有部分依赖包还找不到,有兴趣可以自行打包RPM安装. 2.解包 (1)使用 ar -vx解压ub ...

  8. RedHat 的 crontab

    Chapter 39. Automated Tasks In Linux, tasks can be configured to run automatically within a specifie ...

  9. REDHAT7进入单用户模式

    Redhat7采用的是grub2,和Redhat6.x进入单用户的方法不同. 一.init方法 1.centos7的grub2界面会有两个入口,正常系统入口和救援模式: 2.修改grub2引导 在正常 ...

  10. 鸟哥Linux私房菜(基础篇)——第五章:首次登入与在线求助 man page笔记

    1.X Winsows与文本模式的切换 ●[Ctrl] + [Alt] + [F1] ~ [F6] :文字接口登入 tty1 ~ tty6 终端机.        ●[Ctrl] + [Alt] + ...