JavaScript:流程控制,while循环

189 阅读1分钟

一. 运算符

算术运算符

image.png

  • 优先级

    • 乘、除、取余优先级相同
    • 加、减优先级相同
    • 乘、除、取余优先级大于加、减
    • 使用( )可以提升优先级
    • 总结 先乘除取模, 再加减, 有括号先算括号
  • eg: 计算圆形的面积

<script>
        /*
            需求:对话框中输入圆的半径,算出圆的面积并显示到页面
         */
         
        let r = prompt('请输入圆的半径')
        document.write(`您输入的半径是${r},计算出的记结果是${3.14 * r * r}`)
</script>

赋值运算符

  • 对变量进行赋值的运算符

  • =

    • 赋值
  • +=

    • a = a + 1
    • a += 1
  • -=

    • a = a - 1
    • a -= 1
  • *=

    • a = a * 1
    • a *= 1
  • /=

    • a = a / 1
    • a /= 1
  • %=

    • a = a % 1
    • a %= 1

一元运算符

  • 只需要一个表达式就可以运算的运算符

  • ++ 自增

    • 使用场景 经常用于记数来使用

    • 前置自增 先自加再使用 (++在前 先加)

    • 后置自增 先使用再自加 (++在后 后加)

    • 前置自增和后置自增单独使用时没有区别

    • 案例

      image.png

      • 结果:7

      image.png

      • 结果: 18
  • -- 自减 (与自增同理)

比较运算符

  • 比较两个数据大小、是否相等
 >   左边是否大于右边
 <   左边是否小于右边
 >=   左边是否大于或等于右边
 <=   左边是否小于或等于右边
 ==   左右两边是否相等 只判断类型不匹配类型
 ===   左右两边是否类型和值都相等
 !==   左右两边是否不全等
 比较结果为boolean类型  即只会得到truefalse

逻辑运算符

  • 用来解决多重条件判断

image.png

  • 短路

    • 只存在于 && 和 || 中,当满足一定条件会让右边代码不执行

    image.png

    • 原因 通过左边能得到整个式子的结果, 因此没必要再判断右边
    • 运算结果:无论 && 还是 || ,运算结果都是最后被执行的表达式值,一般用在变量赋值

    image.png

  • 优先级

    image.png

    • 一元运算符里面逻辑非优先级很高
    • 逻辑与比或优先级高

二. 语句

表达式和语句

  • 表达式: 一组代码的集合, JavaScript解释器会将其计算出一个结果
  • 语句: js整句或命令, js语句以分号结束(可以省略,换行代替)

分支语句

  • 分支语句可以让我们有选择性的执行想要的代码 if语句

  • 单分支

image.png

 if (条件) {
            满足条件要执行的代码
 }
  • 案例
    • 括号内的条件为true时,进入大括号里执行代码

    • 小括号内的结果若不是布尔类型时,会发生隐式转换转为布尔类型

    • 用户输入高考成绩,如果分数大于700,则提示恭喜考入黑马程序员

 <script>
        let score = +prompt('请输入你的高考成绩')
        if (score >= 700) {
            alert('恭喜你考入黑马程序员')
        }
 </script>
  • 双分支

image.png

if (条件) {
            满足条件要执行的代码
        }else{
            不满足条件要执行的代码
}

eg1

        //已知用户工资10000
        //用户输入工龄
        //如果工龄大于1年,奖金+2000 并输出工资最终金额,
        //否则输出 您本年无奖金。
	let money = 10000
        let num = +prompt('请输入你的工龄')
        if (num >= 1) {
            alert(`你的工资为${money + 2000}`)
        }
        else {
            alert('您本年无奖金')
        }

** eg2**

        //   闰年平年
        //   能被4整除并且不能被100整除
        //   或者
        //   能被400整除的年份是闰年,否则都是平年
	let year = +prompt('请输入年份')
        if (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) {
            console.log(`${year}年为润年`);
        } else {
            console.log(`${year}年为平年`);
        }
  • 多分支

image.png

	if (条件1) {
            代码1
        } if (条件2) {
            代码2
        } if (条件3) {
            代码3
        } else {
            不满足条件要执行的代码
        }

eg

 <script>
        // 1. 用户输入时间 等我们学完api 自动获取时间

        // 实现 12点前提示上午好 18点前提示下午好 20点前提示晚上好
        let time = +prompt('请您输入现在几点了')
        if (time < 12) {
            alert('上午好')
        } else if (time < 18) {
            alert('下午好')
        } else if (time < 20) {
            alert('晚上好')
        } else {
            alert('早点睡觉!!!')
        }
 </script>
  • 三元运算符

    • 其实是比 if 双分支 更简单的写法,有时候也叫做三元表达式

    • 符号:? 与 : 配合使用

    • 语法

      image.png

eg1

<script>
        // 让用户分别输入两个数字,比较大小,并把最大值输出在页面中
        let num1 = +prompt('请输入第一个数字')
        let num2 = +prompt('请输入第二个数字')
        num1 > num2 ? alert(`${num1}大于${num2}`) : alert(`${num1}小于${num2}`)
</script>

eg2

 <script>
        // 数字补零案例
        let num = +prompt('请输入一个数字')
        num >= 10 ? alert(num) : alert('0' + num)
 </script>
  • switch语句

image.png

<script>
        let num = +prompt('请输入一个数字')
        switch (nun) {
            case 1:
                console.log('您输入的是1');
                break;
            case 2:
                console.log('您输入的是2');
                break;
            case 3:
                console.log('您输入的是3');
                break;
            case 4:
                console.log('您输入的是4');
                break;
        
            default:
                console.log('您的输入有误');
                break;
        }
</script>

image.png -

  • 注意事项

      1. switch case语句一般用于等值判断, 不适合于区间判断
      1. switch case一般需要配合break关键字使用 没有break会造成case穿透

eg: 简单运算器

<script>
        let num1 = +prompt('请输入第一个数字')
        let num2 = +prompt('请输入第二个数字')
        let op = prompt('请输入 + - * / 其中的一个符号')

        switch (op) {
            case '+':
                document.write(`您输入的第一个数字是${num1}, 第二个数字是${num2}, 符号是${op}, 得到的结果是 ${num1 + num2}`)
                break;
            case '-':
                document.write(`您输入的第一个数字是${num1}, 第二个数字是${num2}, 符号是${op}, 得到的结果是 ${num1 - num2}`)
                break;
            case '*':
                document.write(`您输入的第一个数字是${num1}, 第二个数字是${num2}, 符号是${op}, 得到的结果是 ${num1 * num2}`)
                break;
            case '/':
                document.write(`您输入的第一个数字是${num1}, 第二个数字是${num2}, 符号是${op}, 得到的结果是 ${num1 / num2}`)
                break;

            default:
                document.write(您输入的符号有误)
                break;
        }
</script>

三. while循环

循环: 以某个变量为起始点, 然后不断产生变化量, 慢慢靠近终止条件的过程

循环三要素

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

eg1

<script>
        // 1. 输出 1~100个数字
        let i = 1
        while (i <= 100) {
            document.write(`${i} <br>`)
            i++
        }

        // 2. 计算1~100 的累加和  1+2+3+.. + 100   = 5050
        let j = 1
        let sum = 0
        while (j <= 100) {
            sum += j
            j++
        }
        console.log(sum);

        // 3. 求 1~100 之间的偶数累加和  2550
        let a = 1
        let sum2 = 0
        while (a <= 100) {
            if (a % 2 == 0) {
                sum2 += a
            }
            a++
        }
        console.log(sum2);

        // 4. 你爱我吗案例
        // 页面弹出对话框,'你爱我吗',如果输入'爱',则结束,否则一直弹出对话框
        let love = false
        while (love !== '爱') {
            love = prompt('李狗蛋爱张翠花吗?')
        }
    </script>

eg2

<script>
        /*
            1. 由于操作提示是一直弹出的,所以prompt 应该写在循环体里面
            2. 根据用户输入不同的数字,从而实现不同的操作逻辑,所以应该用switch case 分支语句
            3. 由于4是退出,所以可以得知循环条件
            4. 取款即为减法操作 存款即为加法操作 查看余额为输出操作
        */
        let sum = 0
        let num
        while (num !== 4) {
            num = +prompt(`
                请选择功能: 

                1. 查看余额
                2. 存钱
                3. 取钱
                4. 退出
            `)
            switch (num) {
                case 1:
                    alert(`您的余额为${sum}`)
                    break;
                case 2:
                    sum += +prompt('输入存钱金额')
                    alert(`存钱成功, 您的余额为${sum}`)
                    break;
                case 3:
                    sum -= +prompt('输入取钱金额')
                    alert(`取钱成功, 您的余额为${sum}`)
                    break;
                case 4:
                    num = 4
                    break;

                default:
                    alert('输入有误')
                    break;
            }
        }
    </script>