JavaScript自学Day3-循环结构

95 阅读3分钟

if 多分支语句和 switch的共同点和区别

  1. 共同点
    • 都能实现多分支选择, 多选1
    • 大部分情况下可以互换
  2. 区别:
    • switch…case语句通常处理case为比较确定值的情况,而if…else…语句更加灵活,通常用于范围判断(大于,等于某个范围)。
    • switch 语句进行判断后直接执行到程序的语句,效率更高,而if…else语句有几种判断条件,就得判断多少次
    • switch 一定要注意 必须是 === 全等,一定注意 数据类型,同时注意break否则会有穿透效果
    • 结论: 当分支比较少时,if…else语句执行效率高。 当分支比较多时,switch语句执行效率高,而且结构更清晰。

断点调试:

断点:在某句代码上加的标记就叫断点,当程序执行到这句有标记的代码时会暂停下来

作用:帮助理解代码的运行,找到bug

用法:浏览器打开调试界面 在sources一栏 ,选择代码文件

循环结构

JS支持3种循环结构:while循环、do-while循环、for循环

循环四要素

  1. 循环初始化(变量起始值)
  2. 循环判断条件(终止条件,没有终止条件,循环会一直执行,造成死循环)
  3. 循环变量变化(用自增或者自减)
  4. 循环体

循环控制语句 break 跳出循环,一般用于结果已经得到, 后续的循环不需要的时候可以使用(提高效率) continue 停止当前循环体,进入下一次循环。一般用于排除或者跳过某一个选项的时候

无限循环

  1. while(true) 来构造“无限”循环,需要使用break退出循环。(常用)
  2. 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 循环的使用频次会更多。

循环应用

  1. 累加
  • 用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}`)
  1. 循环嵌套 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 属性可以使用,还提供了许多方法:

  1. push 动态向数组的尾部添加一个单元
  2. unshit 动态向数组头部添加一个单元
  3. pop 删除最后一个单元
  4. shift 删除第一个单元
  5. 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);