JavaScript语句
语句是构成编程系统当中的最小单位,它是用于完成某些特定的逻辑功能,也是为了完成代码的流程控制的,所以语句也叫流程控制
语句大体上来说可以分为以下几类
- 分支语句
- 循环语句
- 选择语句
所有的语句都应该是由一个或多个关键字来完成的
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的情况
在if
与else ...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块开始搬砖
- 旺柴要搬10块
- 旺柴每次搬1块
首先,就使用搬砖的思维方式来考虑这个问题
for (var count = 1; count <= 10; count++) {
console.log("旺柴从在搬" + count + "块砖");
}
场景二:旺柴经过多年的搬砖生活以后,肌肉变得发达了,现在可以一次搬2块砖了,胖达很欣慰,看到了旺柴的成长,今天又给旺柴派了一个新的任务,让旺柴还是砖10块砖,旺柴听后非常高兴说道:“小意思啦,我现在是大力士了,可以一次搬2块,来,看我的表演”
现在请根据上面的场景,来使用编程思维解决
- 旺柴从第1块开始搬砖
- 旺柴要搬10块
- 旺柴每次搬2块
for (var count=1; count<=10; count+=2) {
//代码体
console.log("旺柴从在搬" + count + "块砖");
}
场景三:功夫不负有心人,旺柴经过了这么长时间在胖达这里的打拼,小有资本,它偷偷的搬了4块砖藏起来了。今天看到胖达,格外的神气一些,胖达不舒服了。说道:“来,小伙子,给你个光荣而又艰巨的任务,今天要搬20块砖,随便你怎么搬”。旺柴听后,无所谓的道:“没事,可以的,我可以一次搬2块砖”,同时旺柴心底还乐道:“嘿嘿,我之前还有4块砖藏着,可以直接使用,这样我就可以从第5块直接开始了”
现在请根据上面的场景来使用编程的思维解决
- 旺柴从第5块开始
- 旺柴要搬20块
- 旺柴每次搬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
这个关键字以后,代码在运行的时候,就会在这个地方暂停下来
通过上面的图,可以知道,循环的本质就是在不停的去执行三个地方的代码
- 判断循环条件是否成立
- 执行代码体
- 自变量要变化
循环的本质,已经知道了,现在弄清楚一个点,这三个条件是否都是必须的
第一种情况,如果没有初始变量,怎么办
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循环的时候讲到过循环的三个条件
- 初始值
- 循环条件
- 自变量
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);
这个时候可以看到,因为for
与while
都是前测试循环语句,所以在最初的时候循环条件就不成立,它就不会执行,而do...while
是后测试循环语句,它会先执行一遍代码然后再判断条件是否成立,所以do...while
至少会执行一次【因为即使后期条件不成立,也执行了一次】
var a = 10;
do {
console.log("我要牵女孩子的手");
a++;
} while (a < 10);
break与continue
在上面的章节讲循环的时候,提到了循环的次数是由3个条件共同决定的,但是在某些特定的条件下面,它会提前结束循环
正常情况下,的循环代码当条件不成立以后会自动退出循环,但是在JS里面,仍然有2个关键字会让循环中途退出,这2个关键字就是break
与continue
break
有中断循环的意思,提前结束循环,后面的循环不再进行了【半途而废】continue
的意思就是跳过本次循环,继续执行下一次循环【浪子回头】
在多重for循环的嵌套里面,
break
与continue
执行的是就近原则 ,它会的对当前这个循环起作用
场景一:假设旺柴给胖达搬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语句是一个非常简单语句 ,在这一个简单的标记里面,它主要是用于配置嵌套的循环来使用的,用于表明break
或continue
跳到哪一层去
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
中断是内部的循环,这是因为break
与continue
执行的是就近原则,有没有什么办法让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语句是非常相像的,它是根据一个条件来选择某一个部分的代码去执行,所以在某些情况下,if
和switch
两种语句是可以互相转换的
案例:今天的天气很好,同学们都想出去玩,但是小沪说要看下行的天气情况再决定 ,她说如果下雨,就在教室自习,如果下雪,就出去打雪仗,如果起风了,就去放风筝,如果是晴天,就去郊游,否则就在教室里面上课!
现在先使用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;
}