JavaScript基础
流程控制结构
顺序结构
顺序结构是程序中最简单、最基本的流程控制,它没有特定的语法结构,程序会按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的
分支结构
- if分支语句
let names = prompt('请输入你的名字');
// 情景1:如果输入的名字是李华,那么就提示他'吃饭'
if (names == '李华') {
// 如果()里面的条件表达式结果为ture则执行{}里面的代码
alert('吃饭')
}
// 情景2:如果输入的名字是李华,那么就提示他'吃饭',如果不是那么就提示他'睡觉'
if (names == '李华') {
// 如果()里面的条件表达式结果为ture则执行{}里面的代码
alert('吃饭')
} else {
// 否则则执行这里的代码
alert('睡觉')
}
// 情景3:如果输入的名字是李华,那么就提示他'吃饭';如果名字是小红那么就提示他'跑步',如果既不是李华也不是小红那么就提示‘你不归我管’
if (names == '李华') {
alert('吃饭')
} else if (names == '小红') {
alert('跑步')
} else {
alert('你不归我管')
}
// 判断闰年案例:闰年的条件-》年份能被4整除并且不能被100整除,或者能够被400整除
let year = prompt('输入年份')
if (isNaN(year) == true) {
//首先判断用户输入的是否是年份
alert('请输入具体的年份')
} else if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
// 输入框输入的数字也是字符串,但是%之后会有一个隐式转换,因此不需要再转换了,如果不清楚得翻看本专栏的第一章
alert('闰年')
} else {
alert('平年')
}
- 一组分支结构中如果有一个分支的条件表达式成立,执行对应的代码之后,就会结束掉整个分支结构,然后执行分支结构之后的代码
- switch分支语句
// 语法
switch (表达式) {
case value1:
{
// 执行语句1
}
break
case value2:
{
// 执行语句2
}
break
default:
{
// 以上的case都不成立,则执行
}
}
- 如果有一个case成立执行完其对应的语句后,整个switch结束;否则有default则执行default后的语句,default也可以没有
// 案例:查询店内水果的价值
let names = prompt('请输入你要查询的水果')
switch (names) {
case '苹果':
{
alert('9元')
}
break
case '香蕉':
{
alert('8元')
}
break
case '西梅':
{
alert('18元')
}
break
default:
{
alert('本店没有你要查询的水果')
}
}
// 注意事件
1. switch()里面的值与case后面的值是===才会成立
2. 如果没有break则会继续往下执行,不管case有没有成立
- switch语句与if else if语句的区别
// 1.一般情况下,他们两个语句可以相互替换
// 2.switch...case语句通常处理case为比较确定的值的情况,而if..else if语句更加灵活,常用于范围判断(大于等于某个范围)
// 3.switch语句进行条件判断后直接执行到程序的条件语句,效果更高。而if...else语句有几种条件,就得判断多少次
- 三元表达式
//三元表达式也能做一些简单的条件选择,由三元运算符组成的式子称为三元表达式
var a = 1
- 条件表达式?表达式1:表达式2
a = a < 10 ? '0' + 1 : a
console.log(a)//01
循环结构
- for循环
// 语法:
for(初始化变量;条件表达式;操作表达式){
循环体
}
-------------------------------------------------------------------------------
// 执行过程
for (var i = 0; i <= 100; i++) {
console.log('你好,小伙子')
}
如下:
var i = 0
||
i <= 100
|| ||
成立 不成立
console.log('你好,小伙子') 直接结束
i++
i <= 100
||
成立
console.log('你好,小伙子')
i++
i <= 100 一直这样直到该条件表达式不成立,结束
----------------------------------------------------------------------------------
// 双层循环
for(初始化变量;条件表达式;操作表达式){//外层循环
for(初始化变量;条件表达式;操作表达式){//内层循环
循环体
}
}
// 执行过程:
for(var i = 0; i < 10; i++){//外层循环
for(var k = 0; k < 10; k++){//内层循环
循环体
}
}
-外层循环一次,内循环10次。内循环结束后在回到外循环的操作表达式,成立后内循环再十次,每次k都从等于0开始,等于9结束。*能悟多少是多少吧
// 99乘法表
let str = ""
for (var i = 1; i <= 9; i++) {
for (var k = 1; k <= i; k++) {
let c = i + "*" + k + '=' + i * k
str = str + c + " "
}
str += '\n'
}
console.log(str)
- while循环
// 语法:注意要有操作表达式,以防止死循环
while(条件表达式){
循环体
}
// 案例:提问你爱我吗?如果不爱则一直问,爱就结束循环
var flag = prompt('你爱我吗?')
while (flag != '爱') {
flag = prompt('你爱我吗?')
}
- do while循环
// 语法:注意要有操作表达式,以防止死循环
do {
循环体
} while (条件表达式)
// 案例:打印1到100
let a = 1
do {
console.log(a)
a++
} while (a <= 100)
- 与while的区别:先执行do{}循环体,再执行while()表达式,所以说就算表达式一开始就不成立,循环体也至少都会执行一次
continue和break
- continue
// continue关键字用于立即跳出本次循环,继续下一次循环(本次循环中continue之后的代码就会少执行一次)
// 案例 买了5个包子吃,第3个包子有虫子(仍掉),继续吃第4第5个
for (var i = 1; i <= 5; i++) {
if (i == 3) {
continue
}
console.log('吃第' + i + '个包子')
}
//吃第1个包子
//吃第2个包子
//吃第4个包子
//吃第5个包子
- break
//break关键字用于立即跳出整个循环(循环结束)
// 案例 买了5个包子吃,咬了一口第3个发现有虫子,其他的吃不下了
for (var i = 1; i <= 5; i++) {
if (i == 3) {
break
}
console.log('吃第' + i + '个包子')
}
//吃第1个包子
//吃第2个包子