JavaScript语句

JavaScript语句

语句是构成编程系统当中的最小单位,它是用于完成某些特定的逻辑功能,也是为了完成代码的流程控制的,所以语句也叫流程控制

语句大体上来说可以分为以下几类

  1. 分支语句
  2. 循环语句
  3. 选择语句

所有的语句都应该是由一个或多个关键字来完成的

if…else

条件成立
条件不成立
判断条件
条件成立执行的代码
条件不成立执行的代码

if...else是的语句当中的分支语句,它用于做条件判断 ,来控制代码的执行流程,它的语法格式如下

if(条件1){
    //符合条件1的时候
}
else if(条件2){
    //后面还有好多条件....
}
else{
    //不满足条件的时候
}

如下所示

var a = 10;
var b = 20;
// 如果a>b则输出"你好",否则就输出“你不好”
// console.log()
if (a > b) {
    console.log("你好");
}
else{
    console.log("你不好");
}

上面的代码是一个非常简单的流程控制,只有一个条件。但是这里仍然有几个注意事项给大家说一下

var a = 10;
var b = 20;
if(a>b)
    console.log("你好");
else
    console.log("你不好");

当代码体只有一行的时候,可以省略花括号【不建议这么支操作,很容易形成岐义,也很容易出错】

请看下面的要求及代码

var score = 88;
//如果分数在90或以后,就输入优秀
//如果分数在80或以后,就输入良好
//如果分数在70或以后,就输入中等
//如果分数在60或以后,就输入及格
//否则就输出不及格

第一种情况下的代码

if(score>=90){
    console.log("优秀");
}
if(score>=80){
    console.log("良好");
}
if(score>=70){
    console.log("中等");
}
if(score>=69){
    console.log("及格");
}
else{
    console.log("不及格");
}

上面的代码写法是有问题的,它有所有的if都是一个并行条件,它会把所有的if条件都测一遍,只要是符合要求了,就执行了。

最终打印的结果就是“良了,中等,及格”

第二种情况下的代码

if(score>=90){
    console.log("优秀");
}
else if(score>=80){
    console.log("良好");
}
else if(score>=70){
    console.log("中等");
}
else if(score>=60){
    console.log("及格");
}
else{
    console.log("不及格");
}

上面的代码最终打印输出“良好”,它所有的条件都是串行的条件,它要符合了一个要求,就会中断语句,提前结果

在这里插入图片描述

现在分别用2张图来说明这个情况

多个if的情况

在这里插入图片描述

if…else的情况

在这里插入图片描述

ifelse ...if里面,一共定要弄清楚它们的区别点是什么

if是对条件进行判断的的时候成立的时候执行的语句,那么如果if的条件的值不是一个boolean类型怎么办,如下所示

var a = 123;
var b = 0;

if(a){
    console.log("你好");
}
else{
    console.log("世界");
}

if(b){
    console.log("hello");
}
else {
    console.log("world");
}

在这里插入图片描述

一定要弄清楚之前讲过了JS里面6个明确的false条件

for循环语句

for 语句也是一种 ,它会循环的执行代码体里面的代码,它的语法格式如下

for(初始值;循环前测试条件;自变量){
    //代码体
}

现在先从生活当中的最基本的例子来讲起,请看以下场景

场景一:胖达有钱了,办了一个砖厂,旺柴同学在胖达这里在搬砖,今天胖达交给旺柴的任务就是要搬10块砖。因为旺柴的个子比较小,所以一次只能搬动1块砖。那么请用代码来说明一下旺柴搬砖的过程

针对上面的地场景,要弄清楚几个问题

  1. 旺柴从第1块开始搬砖
  2. 旺柴要搬10块
  3. 旺柴每次搬1块

首先,就使用搬砖的思维方式来考虑这个问题

for (var count = 1; count <= 10; count++) {
     console.log("旺柴从在搬" + count + "块砖");
}

场景二:旺柴经过多年的搬砖生活以后,肌肉变得发达了,现在可以一次搬2块砖了,胖达很欣慰,看到了旺柴的成长,今天又给旺柴派了一个新的任务,让旺柴还是砖10块砖,旺柴听后非常高兴说道:“小意思啦,我现在是大力士了,可以一次搬2块,来,看我的表演”

现在请根据上面的场景,来使用编程思维解决

  1. 旺柴从第1块开始搬砖
  2. 旺柴要搬10块
  3. 旺柴每次搬2块
for (var count=1; count<=10; count+=2) {
    //代码体
    console.log("旺柴从在搬" + count + "块砖");
}

场景三:功夫不负有心人,旺柴经过了这么长时间在胖达这里的打拼,小有资本,它偷偷的搬了4块砖藏起来了。今天看到胖达,格外的神气一些,胖达不舒服了。说道:“来,小伙子,给你个光荣而又艰巨的任务,今天要搬20块砖,随便你怎么搬”。旺柴听后,无所谓的道:“没事,可以的,我可以一次搬2块砖”,同时旺柴心底还乐道:“嘿嘿,我之前还有4块砖藏着,可以直接使用,这样我就可以从第5块直接开始了”

现在请根据上面的场景来使用编程的思维解决

  1. 旺柴从第5块开始
  2. 旺柴要搬20块
  3. 旺柴每次搬2块
for(var count = 5;count<=20;count+=2){
    console.log("旺柴从在搬"+count+"块砖");
}

在上面的3个场景里面,可以看到,for循环里面的三个条件是可以根据实际的场景去做出相应的改变的,这个三个条件代表的是什么意思,同学样一定要知道

循环的本质

for循环的本质其实就是指for循环代码的执行过程是什么样式,现在通过断点调试的方式来进行

debugger;
for (var i = 1; i <= 10; i++) {
    console.log(i);
}

当在代码里面添加了debugger这个关键字以后,代码在运行的时候,就会在这个地方暂停下来

在这里插入图片描述

在这里插入图片描述

通过上面的图,可以知道,循环的本质就是在不停的去执行三个地方的代码

  1. 判断循环条件是否成立
  2. 执行代码体
  3. 自变量要变化

循环的本质,已经知道了,现在弄清楚一个点,这三个条件是否都是必须的

第一种情况,如果没有初始变量,怎么办

var count = 1;      //循环的初始变量是可以写在外边的
for (; count <= 10; count++) {
    console.log(count);
}

第二种情况,省略循环的判断条件

for(var count=1;;count++){
    console.log(count);
}
//省略了循环的结束判断条件,那么这个循环就会一直进行,它就是一个死循环

第三种情况,省略自变量

for(var count=1;count<=10;){    //省略了自变量,它也会变成一个死循环
    console.log(count);
}

综上所这述,for里面的三个东西,是都可以省略了

for(;;){
    console.log("hello world");
}

上面的语法是没有错的,但是它是一个死循环


while循环语句

while循环语句与for循环的语句的本质是一样的,都是一样前测试循环语句,它的语法格式如下

while(循环条件){
    //代码体
}

while是当循环条件成立的时候会一直执行的代码 ,这个和之前所学习的for循环是一样的。之前在讲for循环的时候讲到过循环的三个条件

  1. 初始值
  2. 循环条件
  3. 自变量
for(var i=1;i<=10;i++){
    console.log(i);
}

上面的for循环可以写成下面的样式

//之前都讲过,循环里面的三个部分,是可以拆分来写的
var i=1;
for(;i<=10;){
    console.log(i);
    i++;
}

现在就将上面的for转写成while循环

var i=1;
while(i<=10){
    console.log(i);
    i++;
}

do…while循环语句

do…while循环语句它是一个后测试循环语句,先执行代码体,再判断条件是否成立

语法格式

//初始值
do{
    //代码体
    //自变量
}while(循环条件)

通俗来讲就是“先上车,后买票”

 // 想打印1~10之间的数
// for(var i=1;i<=10;i++){
//     console.log(i);
// }

// var i = 1;
// while (i <= 10) {
//     console.log(i);
//     i++;
// }

// do...while的写法
var i = 1;
do {
    console.log(i);
    i++;
} while (i <= 10);

通过上面的代码对比发现,三种循环最终得到的结果是一样的,那么为什么还需要do...while

将上面的代码的初始条件更改一出,就发现区别了

// 想打印1~10之间的数
// for (var i = 11; i <= 10; i++) {
//     console.log(i);
// }

// var i = 11;
// while (i <= 10) {
//     console.log(i);
//     i++;
// }

// do...while的写法
var i = 11;
do {
    console.log(i);
    i++;
} while (i <= 10);

这个时候可以看到,因为forwhile都是前测试循环语句,所以在最初的时候循环条件就不成立,它就不会执行,而do...while是后测试循环语句,它会先执行一遍代码然后再判断条件是否成立,所以do...while至少会执行一次【因为即使后期条件不成立,也执行了一次】

var a = 10;
do {
    console.log("我要牵女孩子的手");
    a++;
} while (a < 10);

在这里插入图片描述

break与continue

在上面的章节讲循环的时候,提到了循环的次数是由3个条件共同决定的,但是在某些特定的条件下面,它会提前结束循环

正常情况下,的循环代码当条件不成立以后会自动退出循环,但是在JS里面,仍然有2个关键字会让循环中途退出,这2个关键字就是breakcontinue

  • break有中断循环的意思,提前结束循环,后面的循环不再进行了【半途而废】
  • continue的意思就是跳过本次循环,继续执行下一次循环【浪子回头】

在多重for循环的嵌套里面,breakcontinue执行的是就近原则 ,它会的对当前这个循环起作用

场景一:假设旺柴给胖达搬10块砖,但是旺柴在搬到第5块砖的时候就接到他爸爸的电话,说:“儿啊,你爸我中了彩票,5000万,你要做富二代了”,旺柴听了这个话以后,非常兴奋,直接把手上的砖一丢,说:“去TMD,我也是富二代了”

面对上面的场景,怎么办呢?

/*
	初始值:1
	结束值:10
	自变量:1
*/
for(var count=1;count<=10;count++){
    //现在旺柴要他爸电话
    if(count==5){
        break;
		//因为是break,所以提前结束了循环,后面的次数也不再进行了
    }
    console.log("旺柴正在搬"+count+"块砖");
}

场景二:旺柴拿着他爸爸给了5000,怀揣着梦想去了一个心仪已久的城市—东莞,结果被骗了,身心疲惫的回到了胖达的身边继续搬砖,突然之间它觉得,在这个炎炎夏日里,还是只有胖达里的心是最温暖的,只有胖达对自己好!下定决心的旺柴决定要在胖达这里好好奋斗,做一个最强的搬砖人。胖达给旺柴派发了又一次的任务,搬10块砖,从第1块开始,因为天气太热,所以就1次只搬一次,这个时候正当旺柴开心的搬砖的时候,在耳边双听到了胖达的声音:”旺柴 ,你爸电话“

旺柴听到胖达的声音以后,身体一震,把手上的砖一丢,带着期望的眼神走向了办公室去接听电话,颤抖的声音说道:”爸呀,你又买彩票了?“

只见电话那头许久未曾出声,接着,一个声音慢悠悠的说道:“儿啊,你爸我失业了,给爸打点钱”

胖达在旁边看了许久,也不知道电话那头具体说了些什么,只见旺柴听完电话以后,神低落的走出了办公室 ,嘴里还喃喃的说道:“其它那些砖也不那么烫手了,我要继续搬砖,争取今天搬到100块,拿到今天的饭钱,这样我就可以请我的爸吃饭了”

针对上面的场景 ,又应该怎么样使用编程的思维去解决呢?

for (var count = 1; count <= 10; count++) {
    // 当搬到第5块砖的时候 ,旺柴接电话去了
    if(count==5){
        //接电话
        continue;
    }
    console.log("旺柴正在搬" + count + "块砖");
}

嵌套的循环

循环也是可以嵌套的,如多个for循环是可以嵌套在一起的

for(var a=1;a<=10;a++){
    for(var b = 1;b<=10;b++){
        //代码体
    }
}

在上面的代码里面,可以看到,循环是可以进行嵌套的,嵌套的循环也可以有多层的嵌套关系,只要循环的语法是正确的,并且不要形成死循环就好

现在请根据下面的图片打印九九乘法表,这里会使用到2层的嵌套循环

在这里插入图片描述

 for (var row = 1; row <= 9; row++) {
     var str = "";
     for (var col = 1; col <= row; col++) {
         str += col + "*" + row + "=" + col * row + "\t";
     }
     console.log(str);
 }

label语句

label语句是一个非常简单语句 ,在这一个简单的标记里面,它主要是用于配置嵌套的循环来使用的,用于表明breakcontinue跳到哪一层去

for (var row = 1; row <= 9; row++) {
    var str = "";
    for (col = 1; col <= row; col++) {
        str += row + "*" + col + "=" + row * col + "\t";
        if (col == 5) {
            break;
        }
    }
    console.log(str);
}

在上面的代码里面,在第二个循环里面使用了break,这个时候得到的结果如下所示

在这里插入图片描述

从上面的图里面,可以看出,for里面的break中断是内部的循环,这是因为breakcontinue执行的是就近原则,有没有什么办法让break/continue去指定的循环那里跳出或中断呢,这个时候就需要使用label

aaa:for (var row = 1; row <= 9; row++) {
    var str = "";
    bbb:for (col = 1; col <= row; col++) {
        str += row + "*" + col + "=" + row * col + "\t";
        if (col == 5) {
            break aaa;   //在这里通过label来跳出了指定的for循环
        }
    }
    console.log(str);
}

switch语句

switch语句也叫选择语句,它会选择符合条件的语句去执行,它与的if语句关系是最为亲密

switch语句应该与case语句结合在一起使用,它的语法格式如下

switch(条件的值){
    case 条件1:
        //条件1的代码体
        break;
    case 条件2:
        //条件2的代码体
        break;
    //这里可能还有很多个case
    default:
        //所有的条件都不符合要求的时候
        break;        
}

上面的场景与之前所学习的if语句是非常相像的,它是根据一个条件来选择某一个部分的代码去执行,所以在某些情况下,ifswitch两种语句是可以互相转换的

案例:今天的天气很好,同学们都想出去玩,但是小沪说要看下行的天气情况再决定 ,她说如果下雨,就在教室自习,如果下雪,就出去打雪仗,如果起风了,就去放风筝,如果是晴天,就去郊游,否则就在教室里面上课!

现在先使用if语句来完成

var weather = "晴天";
if (weather == "下雨") {
    console.log("自习");
}
else if (weather == "下雪") {
    console.log("打雪仗");
}
else if (weather == "起风") {
    console.log("放风筝");
}
else if (weather == "晴天") {
    console.log("郊游");
}
else {
    console.log("上课");
}

上面的代码里面,使用了很多个if去完成,if太多对的阅读代码并不友好,所以可以换一种方式来完成这种业务逻辑

接下来,使用switch...case来完成

var weather = "下雪";
//swtich会根据weather的值来选择某一个
//符合要求的条件去执行
switch (weather) {
    case "下雨":
        console.log("自习");
        break;
    case "下雪":
        console.log("打雪仗");
        break;
    case "起风":
        console.log("放风筝");
        break;
    case "晴天":
        console.log("郊游");
        break;
    default:
        console.log("上课");
        break;
}

switch的注意事项一:当没有break的时候

var weather = "下雪";
switch (weather) {
    case "下雨":
        console.log("自习");
    case "下雪":
        console.log("打雪仗");
    case "起风":
        console.log("放风筝");
    case "晴天":
        console.log("郊游");
    default:
        console.log("上课");
}

这个时候可以看到,上面的代码没能 了break,当case的一个条件 执行完毕以后,它不会退出,它会继续选择并执行后面的case的代码,直到碰到了break或程序退出

所以程序最终输出的结果应该就是"打雪仗,放风筝,郊游,上课"

switch注意事项二:switch...case在执行判断的时候使用的是====全等操作

在这里插入图片描述

在上面的代码里面,可以很清楚的就看互它们的区别,左边打印的结果是D,右边的打印结果是B

原因switch...case在做条件选择的时候,它使用的是强判断全等操作===,而右边的if语句里面使用的是==的相等操作,在相等操作里面"1"==1这是成立的,而全等里面则不相等

在这里插入图片描述

swtich…case注意事项三:当有多个case条件符合要求的时候 ,优先选择第一个执行

var a = 1;
switch (a) {
    case 1:
        console.log("A");
        break;
    case 2:
        console.log("B");
        break;
    case 1:
        console.log("D");
        break;
    default:
        console.log("F");
        break;
}

案例一:现有一个学生成绩的变量 score ,要根据学生成绩来定等级。等级划分如下: 100~90为优秀,80~89为良好,70~79为中等,60~69为及格,否则就不及格,请使用 switch 语句去完成代码

var score = 86;
switch (true) {
    case score >= 90:
        console.log("优秀");
        break;
    case score >= 80:
        console.log("良好");
        break;
    case score >= 70:
        console.log("中等");
        break;
    case score >= 60:
        console.log("及格");
        break;
    default:
        console.log("不及格");
        break;
}

下面还有一种思路

var score = 100;
var n = ~~(score / 10);
switch (n) {
    case 10:
    case 9:
        console.log("优秀");
        break;
    case 8:
        console.log("良好");
        break;
    case 7:
        console.log("中等");
        break;
    case 6:
        console.log("及格");
        break;
    default:
        console.log("不及格");
        break;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值