JavaScript 基础 - 语句
表达式和语句
什么是表达式? 表达式是可以被求值的代码, JS引擎会将其计算出一个结果, 3 + 4, num++等都是表达式
什么是语句? 语句是一段可以执行的代码, 比如if语句、for循环语句等等
表达式和语句的区别 | |
---|---|
表达式 | 表达式可以被求值, 所以它可以卸载赋值语句的右侧 |
语句 | 语句不一定有值, 比如alert()、for等语句就不能被用于赋值 |
分支语句
程序的三种流程控制语句
- 顺序结构: 从上往下依次执行, 每条语句都会执行到
- 分支结构: 根据条件选择执行代码(
有选择性
) - 循环语句: 某段代码被
重复
执行
分支语句包含: if分支
、三元运算符
、 switch分支
if分支语句
if分支语句又分为单分支语句、双分支语句、多分枝语句
// 单分支语句
if(条件) {
符合条件时执行这里的语句
}
// 双分支语句
if(条件) {
满足条件要执行的代码
} else {
不满足条件执行的代码
}
// 多分支if语句
if(condition1) {
code1
} else if(condition2) {
code2
} else if(condition3) {
code3
} else {
codeelse
}
上面的代码块中的条件表达式值如果不为boolean
类型, 就会发生隐式类型转换, 因此具有如下特点:
- 当条件为数字时, 除了0和NaN所有的数字都为真
- 当条件为字符串时, 除了**‘’**(空字符串)都为真
- ⚠️ ’ ‘和’'不一样, ’ '为真, ''为假
例1: 判断指定年份是闰年还是平年?
let year = +prompt('请输入年份:')
if (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) {
alert(`${year}是闰年`);
} else {
alert(`${year}是平年`)
}
三元运算符
三元运算符(需要三个操作数)通用 ?
与 :
配合使用, 一般用来取值
语法如下, 当condition为true时, 执行code1, 否则执行code2
condition ? code1 : code2
例1: 输入一个数字, 如果数字小于10, 就在前面补一个0
let num = prompt('请输入一个数字:')
alert(num < 10 ? 0 + num : num) // +两边有一个字符串, 则结果为字符串
switch语句
找到跟目标数据相等的case, 并执行里面对应的代码; 如果没有全等
, 则执行default
里面的代码
switch (data) {
case value1: {
code1
break
}
case value2: {
code2
break
}
case value3 {
code3
break
}
default { // 相当于if...else...分支中的else部分
codeDefault
}
}
⚠️ 必须确保case中有
break
, 否则会发生穿透(之后的case都会执行, 直到遇见break或者执行完default)
什么是穿透?
执行完指定case的代码块后, 不会退出该switch代码块, 而是继续执行下一个case的代码块, 直到遇见break或者执行完default代码块
例1: 实现一个简易计算器
let num1 = +prompt('please input the first number:')
let num2 = +prompt('please input the second number:')
let operator = prompt('please input the operator:')
let result
switch (operator) {
case '+':
result = num1 + num2
break
case '-':
result = num1 - num2
break
case '*':
result = num1 * num2
break
case '/':
result = num1 / num2
break
default:
alert('Not an operator')
}
alert(`result is ${result}`)
switch和if之间的区别:
- switch…case语句通常处理case为确定值的情况, 而if…else…语句更加灵活, 通常用于范围判断
- switch语句进行判断后直接执行到程序的语句, 效率更高. 而if…else…语句有几种判断条件, 就得判断多少次
- switch一定要注意必须是
===
全等, 一定注意数据类型, 同时一定要写break
, 否则会有穿透效果
循环语句
循环
: 重复执行一些操作
循环的本质就是以某个变量为起始值
, 然后不断产生变化量
, 慢慢靠近终止条件
的过程
while循环
while: 在…期间, 满足条件期间, 重复执行某段代码
while(条件) {
code // 循环体
}
while大括号里面代码执行完毕后不会跳出, 而是继续回到小括号里面判断条件是否满足, 若满足又执行大括号里的代码, 然后再回到小括号判断条件, 直到括号里的条件不满足才跳出
while循环的三要素:
- 变量起始值
- 终止条件(没有终止条件, 循环会一直执行, 造成死循环)
变量变化量(改变条件涉及的变量, 用自增或者自减)
for循环
for循环把循环三要素(声明起始值、终止条件、变量变化量)写在一起,一目了然, 最为常用
for循环的语法:
for (变量起始值; 终止条件; 变量变化量) {
// 循环体
}
for循环的最大价值: 循环数组
let array = ['jack', 'zhao', 'zhang', 'huang']
for (let i = 0; i < array.length; i++) {
console.log(array[i]);
}
console.log(array[6666]) // undefined JS不存在数组越界问题
无限循环的写法:
- while(true)
- for( ; ????
什么时候用for循环, 什么时候使用while
- 如果明确了循环的次数的时候使用for
- 存在循环嵌套时, 使用for
- 当不明确循环的次数时, 使用while
for循环嵌套
一个循环里面有另一个循环
for (外部声明纪录循环次数的变量; 循环条件; 变化值) {
for (内部声明纪录循环次数的变量; 循环条件; 变化值) {
循环体
}
}
循环退出
- break: 退出整个循环, 用于结果已经得到, 后续的循环
不需要
再执行 - continue: 结束本次循环, 继续下次循环(不退出整个循环), 用于
排除或者跳过
某一个选项
例: 页面弹出对话框, ‘你爱我吗’, 如果输入’❤️’, 则退出循环, 否则一直弹出
let answer
while (answer !== '❤️') {
answer = prompt('你爱我吗')
}
alert('❤️')