13_JavaScript基础入门(3)

条件分支语句

条件分支语句,也叫作条件判断语句,就是根据某种条件执行某些语句,不执行某些语句。
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的本质

系统遇见了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);
    }


}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容