if 多分支语句和 switch的共同点和区别
- 共同点
- 都能实现多分支选择, 多选1
- 大部分情况下可以互换
- 区别:
- switch…case语句通常处理case为比较确定值的情况,而if…else…语句更加灵活,通常用于范围判断(大于,等于某个范围)。
- switch 语句进行判断后直接执行到程序的语句,效率更高,而if…else语句有几种判断条件,就得判断多少次
- switch 一定要注意 必须是 === 全等,一定注意 数据类型,同时注意break否则会有穿透效果
- 结论: 当分支比较少时,if…else语句执行效率高。 当分支比较多时,switch语句执行效率高,而且结构更清晰。
断点调试:
断点:在某句代码上加的标记就叫断点,当程序执行到这句有标记的代码时会暂停下来
作用:帮助理解代码的运行,找到bug
用法:浏览器打开调试界面 在sources一栏 ,选择代码文件
循环结构
JS支持3种循环结构:while循环、do-while循环、for循环
循环四要素
- 循环初始化(变量起始值)
- 循环判断条件(终止条件,没有终止条件,循环会一直执行,造成死循环)
- 循环变量变化(用自增或者自减)
- 循环体
循环控制语句
break 跳出循环,一般用于结果已经得到, 后续的循环不需要的时候可以使用(提高效率)
continue 停止当前循环体,进入下一次循环。一般用于排除或者跳过某一个选项的时候
无限循环
- while(true) 来构造“无限”循环,需要使用break退出循环。(常用)
- for(;;) 也可以来构造“无限”循环,同样需要使用break退出循环。
while循环
语法:
while(条件){
代码块(循环体)
}
例: ![[while循环.jpg]]
// 综合案例:银行卡存取钱、查看余额、退出
<script>
let money = 100
while (true) {
let re = +prompt(`
请您选择操作:
1.存钱
2.取钱
3.查看余额
4.退出
`)
// 2. 如果用户输入的 4 则退出循环, break 写到if 里面,没有写到switch里面, 因为4需要break退出循环
if (re === 4) {
break
}
// 4. 根据输入做操作
switch (re) {
case 1:
// 存钱
let cun = +prompt('请输入存款金额')
money = money + cun
break
case 2:
// 存钱
let qu = +prompt('请输入取款金额')
money = money - qu
break
case 3:
// 存钱
alert(`您的银行卡余额是${money}`)
break
}
}
</script>
for循环
语法:
for(初始化表达式; 条件; 条件改变表达式){
循环体
}
例:
for (let i = 1; i <= 3; i++) {
document.write(`这是第${i}次循环<br>`)
}
for的语法结构更简洁,故for循环的使用频次会更多。
循环应用
- 累加
- 用while循环求1~100的数字和
let i = 1
let sum = 0
while (i <= 100) {
sum = sum + i
sum += i
i++
}
document.write(sum)
document.write(sum/100) //求平均值
- 用for循环求1~100的数字和
let sum = 0
for (let i = 1; i <= 100; i++) {
sum = sum + i
}
document.write(sum)
- 用while循环求1~100中的偶数和
let i = 1
let sum = 0
while (i <= 100) {
if (i % 2 === 0) { // 筛选偶数 只有偶数才累加
sum = sum + i
}
i++ // 每次循环都要自加
}
document.write(`1~100之间的偶数和是: ${sum}`)
- 用for循环求1~100中的偶数和
let sum = 0
for (let i = 1; i <= 100; i++) {
if (i % 2 === 0) {
sum += i
}
}
document.write(`1~100之间的偶数和是: ${sum}`)
- 循环嵌套 JavaScript中任何一种循环语句都支持循环的嵌套 for循环的嵌套:
for(外部声明记录循环次数的变量;循环条件;变化量){
for(内部声明记录循环次数的变量;循环条件;变化量){
循环体
}
}
// 1. 外面的循环 记录第n天
for (let i = 1; i < 4; i++) {
document.write(`第${i}天 <br>`)
// 2. 里层的循环记录 几个单词
for (let j = 1; j < 6; j++) {
document.write(`记住第${j}个单词<br>`)
}
}
九九乘法表:
for (let i = 1; i <= 9; i++) {
for (let j = 1; j <= i; j++) {
document.write(`${j} x ${i} = ${j * i}`)
}
document.write('<br>')
}
数组
基本使用
数组:(Array)是一种可以按顺序保存数据的数据类型 使用场景: 如果有多个数据可以用数组保存起来,然后放到一个变量中,管理非常方便 [[Day1-JavaScript基础语法#数组]]
数组求和
let arr = [2, 6, 1, 7, 4]
let sum = 0
for (let i = 0; i < arr.length; i++) {
sum = sum + arr[i]
}
document.write(`数组的和为:${sum}<br>数组的平均数为:${sum/arr.length}`)
求数组中的最大/最小值
let arr = [1, -3, 5, 77, 52, 25, 88]
let max = arr[0]
let min = arr[0]
for (let i = 1; i < arr.length; i++) {
if (max < arr[i]) {
max = arr[i]
}
if (min > arr[i]) {
min = arr[i]
}
}
document.write(`数组的最大值:${max}<br>数组的最小值为:${min}`)
操作数组
数组做为对象数据类型,不但有 length 属性可以使用,还提供了许多方法:
- push 动态向数组的尾部添加一个单元
- unshit 动态向数组头部添加一个单元
- pop 删除最后一个单元
- shift 删除第一个单元
- splice 动态删除任意单元
使用以上4个方法时,都是直接在原数组上进行操作,即成功调任何一个方法,原数组都跟着发生相应的改变。并且在添加或删除单元时 length 并不会发生错乱。
// 定义一个数组
let arr = ['html', 'css', 'javascript']
// 1. push 动态向数组的尾部添加一个单元
arr.push('Nodejs')
console.log(arr)
arr.push('Vue')
// 2. unshit 动态向数组头部添加一个单元
arr.unshift('VS Code')
console.log(arr)
// 3. splice 动态删除任意单元
arr.splice(2, 1) // 从索引值为2的位置开始删除1个单元
console.log(arr)
// 4. pop 删除最后一个单元
arr.pop()
console.log(arr)
// 5. shift 删除第一个单元
arr.shift()
console.log(arr)
// 冒泡排序
let arr = [9, 6, 8, 7, 3, 4, 2, 5, 1]
for (let i = 0; i <= arr.length - 1; i++) {
for (let j = 0; j <= arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
console.log(arr);