运算符/语句/while循环

215 阅读3分钟

运算符

算术运算符

+:求和

-:求差

*:求积

/:求商

%:取模(取余数)应用场景:是否能被整除

取余可以隐式将字符串转换成数字

优先级

先乘除取余,后加减,有小括号先算小括号里面的

拓展:Math.PI 为圆周率

赋值运算符

对变量进行赋值的运算符

将等号右边的值赋予给左边,要求左边必须是一个容器

<script>
    let a = 1
    // a = a + 3 的另外一种写法
    // 1 + 3 再赋值给a
    a += 3
    //输出的值为 4
    console.log(a)
</script>

一元运算符

根据所需表达式的个数,分为一元运算符,二元运算符,三元运算符 使用场景:经常用于计数来使用,比如进行10次操作,用它来计算进行多少次了

自增

符号:++

作用:让变量的值+1

前置自增 ++i

<script>
    let i = 1
    console.log(++i +2)
    // ++i i自加1 此时已经变成2,2+2,结果是4
    // i先自加1,变成2之后,在和后面的2相加
</script>

注:先自加再使用(记忆口诀:++在前 先加)

后置自增 i++

<script>
    let i = 1
    console.log(i++ +2)
    // i++ 计算机看到i++,它是不参与运算的,i还是本身的值,结果是3
    // i++ 一开始是不参与运算的,它会在下次运算时加入
</script>

注:先使用再自加(记忆口诀:++在后 后加)

注:前置自增与后置自增独立使用时二者并没有差别

一般开发中我们都是独立使用

开发中 i++ 后置自增会使用相对较多

面试题

<script>
    let i = 1
    console.log(i++ + ++i + i)
    // 第一个i是后置自增,不参与此次运算,第一个值是1,加完之后,此时i的值是2
    // 第二个i是前置自增,加上1,此时i的值是 2 + 1 = 3
    // 此时i的值是3
    // 结果是:1 + 3 + 3 = 7
</script>

自减

符号:--

作用:让变量的值-1

比较运算符

作用

比较两个数据大小,是否相等

使用

">" 左边是否大于右边

"<" 左边是否小于右边

">=" 左边是否大于或等于右边

"<=" 左边是否小于或等于右边

"==" 左右两边是否相等

"=== " 左右两边是否类型和值都相等

"!== " 左右两边是否不全等

补充

// = 代表赋值运算符 = 左侧必须是一个容器(变量)

== 只判断数值,不匹配类型,不是特别的严谨

// 就会导致 5 == ‘5’ 返回结果是 true 的情况

在开发中我们更喜欢严谨一点的 ===

因为 === 不仅可以匹配数值还可以匹配数据类型

// 5 === ‘5’ 返回结果是false 5 === 5 返回结果是true

注:NaN不等于任何值,包括它本身

尽量不要比较小数,因为小数有精度问题

了解

image.png

逻辑运算符

逻辑运算符用来解决多重条件判断

image.png 逻辑运算符的短路

image.png 原因:用过左边能得到整个式子的结果,由此没必要再判断右边

运算结果:无论&&还是||,运算结果都是最后被执行的表达式值,一般用在变量赋值

image.png 注:0 ‘ ’ undefined null NaN -> false 这些值转换成布尔值是假的

优先级

image.png 注:一元运算符里面的逻辑非优先级最高

逻辑与比逻辑或优先级高

案例
<script>
    // 用户输入一个,判断这个数能被4整除,但是不能被100整除
    let num = prompt('请输入一个数字')
    // 被整除,不能有余数,余数等于0
    // 不能被整除,可以有余数,余数不等于0
    console.log(num % 4 === 0 && num %100 !== 0);
</script>

\

语句

与表达式的区别

表达式可以做一些运算,从而返回结果

语句是让程序执行某些操作,让某件事情发生,弹出输入框等

程序三大流程控制语句

image.png

分支语句

代码A不满足条件就执行代码B,可以让代码变得更加有逻辑性

if语句

单分支

<script>
    let score = prompt('请输入您的高考成绩')
    /* 当用户输入的成绩是700以上的值时,执行下列条件
       700以下的值时,则无事发生 */
    if (score > 700) {
        alert('恭喜您考入黑马程序员')
    }
</script>

注:括号内的条件为true时,进入大括号里执行代码

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

双分支

<script>
    let year = +prompt('请输入您要查询的年份')
    // 条件
    if (year % 4 === 0 && year % 100 !== 0) {
        alert(`您输入的${year}年份,是闰年哦`) //满足条件执行的代码
    } else {
        alert(`您输入的${year}年份,是平年哦`) //不满足条件执行的代码
    }
</script>

注:满足与不满足条件都只会执行一行代码,不会重复

多分支

<script>
    let time = prompt('请您输入时间')
    if (time < 12) {
        alert('上午好哟')
    } else if (time < 18) {
        alert('下午好哇')
    } else if (time < 20) {
        alert('晚上好呀')
    } else {
        alert('早些睡吧,早睡早起身体好')
    }
</script>

注:条件与条件之间存在互斥的关系,执行这一行,则不会执行其它行

三元运算符

可以处理一些简单的分支逻辑,一般用来取值

语法:条件 ?满足条件执行的代码 :不满足条件执行的代码

<script>
    let num1 = +prompt('请输入第一个数字')
    let num2 = +prompt('请输入第二个数字')
    num1 > num2 ? alert(`${num1}大一点`) : alert(`${num2}大一点`)
</script>

用户输入的是字符串型,我们要主动将其转换成数字型,好进行后续比较操作

注:只要涉及数字方面的,最好主动将其转换成数字型,避免出现BUG

switch语句

适用于精确到某一个值的判断

<script>
    let num1 = +prompt('请输入第一个数字')
    let op = prompt('请输入一个运算符')
    let num2 = +prompt('请输入第二个数字')
    switch (op) {
        case '+':
            document.write(`你输入的第一个数是${num1},选择的运算符是${op},第二个数字是${num2},最
终得出的结果是${num1 + num2}`)
            break;
        case '-':
            document.write(`你输入的第一个数是${num1},选择的运算符是${op},第二个数字是${num2},最
终得出的结果是${num1 - num2}`)
            break;
        case '*':
            document.write(`你输入的第一个数是${num1},选择的运算符是${op},第二个数字是${num2},最
终得出的结果是${num1 * num2}`)
            break;
        case '/':
            document.write(`你输入的第一个数是${num1},选择的运算符是${op},第二个数字是${num2},最
终得出的结果是${num1 / num2}`)
            break;
        default:
            alert('您输入的运算符有误')
            break;
    }
</script>

注:break 中文意思“打断”:代表着此段逻辑结束

switch case语句一般用于等值判断,不适合区间判断

switch case一般需要配合break关键字使用,没有break会造成case穿透

\

循环

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

while 循环

while :在 ... 期间

循环必须有3要素

1.变量的起始值

2.循环条件

3.变量变化

<script>
    // 变量起始值 从1开始进行循环
    let i = 1
    // 进入循环的条件 / 到达10时,停止循环
    while(i <= 10) {
        document.write('')
        // 变化量  通过自增靠近终止条件
        i++
    }
</script>

案例

// 计算1~100 的累加和  1+2+3+.. + 100   = 5050
<script>
    // 累加和 意味着需要两个变量
    let i = 1
    let sum = 0
    while (i <= 100) {
    sum = sum + i
    i++
}
</script>

案例

// 求 1~100 之间的偶数累加和  2550
<script>
    // 偶数? 一个数字 除以2的余数为0
    let i = 1
    let sum = 0
    while (i <= 100) {
    // 追加一个判断 你可以累加和 但是必须是偶数才进行和的累加计算
       if (i % 2 === 0) {
        sum = sum + i
       }
       i++
     }
    console.log(sum);
</script>

综合案例

<script>
    // 创建账户总余额
    let money = 0
    // 让它一开始就等于0(不等于4即可),让它进入循环
    let opticy = 0
    while (opticy !== 4) {
    opticy = +prompt(`请选择您的操作:
    1.取款
    2.存款
    3.查看余额
    4.退出
    `)
       switch (opticy) {
           case 1:
              // 取款的操作:
              // 1. 弹出一个propmt 问用户 取多少钱
              // 2. 告诉用户 当前账户还剩多少钱 
              let qukuan = +prompt(`请输入您的取款金额`)
              money = money - qukuan
              alert(`取款成功,您的余额为${money}`)
              break;
           case 2:
              // 存款的操作:
              // 1. 弹出一个prompt 问用户存多少钱
              // 2. 告诉用户 当前账户还剩多少钱
              let cunkuan = +prompt(`请输入您的存款金额`)
              money = money + cunkuan
              alert(`存款成功,您的余额为${money}`)
              break;
           case 3:
              alert(`您的余额为${money}`)
              break;
           case 4:
              break;
           default:
               alert('请输入正确的编号')
               break;
       }
    }
</script>

\