JS中的运算符和if语句的基础知识

693 阅读7分钟

易错回顾

let str = "123abc"
console.log(parseInt(str))  //123   
console.log(Number(str))   //NaN
console.log( typeof Object)    //function
console.log( typeof Function)    //function

image-20220327150407096

js 注释(// /****/) 有两种 css注释 只有一种 (//)

let flag = new Boolean("true") //转布尔型 显示转换

image-20220327100131902

算术运算符

  • 加减乘除 求余 取模(获的整数后的余数)
       // 加减乘除
        console.log('10 + 10  ----->  ', 10 + 10);
        console.log('10 -5  ----->  ', 10 -5);
        console.log('10 * 10  ----->  ', 10 * 10);
        console.log('10 / 2  ----->  ', 10 / 2);
        // 先乘除后加减
        console.log('10 + 2 * 5  ----->  ', 10 + 2 * 5);
        // 有括号先算括号内的,再乘除,最后加减  ,从左到右一次运算
        console.log('10 * 2 + (10 + 10) * 2  ----->  ',1 + 10 * 2 + (10 + 10) * 2);

求余=取模 获得整数

除法运算 获取除法元素后 剩下 余数

console.log(10 % 5);  // 0 
console.log(10 % 3);  //1

如果一行内,出现了多个运算符,先乘除后加减 如果有括号 先算括号

console.log(1 + 1 * 2)
console.log((1 + 1)*2)

多个运算符时,一般按自己的想法来 加括号

console.log(1 + (2* 3 +3) / 4 + 4 * 5 +5)

image-20220327093237687

计算圆的面积

//π * r 的平方

// 在js中 通过什么来代表 π

Math.PI    表示 π
Math  表示数学
        // π * r * r
        // Math.PI 在js中表示 π
        let r = prompt("请输入圆的半径")
        console.log(' 圆的面积是 ----->  ',r * Math.PI * r );

image-20220327093743683

赋值运算符

定义:将等号右边的值赋给左边 ,要求左边必须是一个变量

作用:简化代码

    // 以前
      // let num = 1
      // num = num + 1
      // console.log('num  ----->  ', num);
      // 现在
      // let num = 1 ; num = num + 1;
      // let num1 = 1; num1 += 1;  console.log(num1)  //2
      // let num2 = 100; num2 -= 10;   console.log(num2)  //90
      // let num3 = 100; num3 *= 10;   console.log(num3)  //1000
      // let num4 = 100; num4 /= 10;   console.log(num4)  //10
      let num5 = 100;
      num5 %= 10;
      console.log('num5  ----->  ', num5); //0

image-20220327094838050

image-20220327095354907

JavaScript的运算符可以根据所需表达式的个数,分为一元运算符,二元运算符,三元运算符

一元运算符

正负号

二元运算符  let num = 1; num = num + 1 //两个数运算
一元运算符 let num1 = 1; num1++ ;num1--;++num1 ;num1--

运用:能使用一元运算符做一元运算

  • 自增

符号:++

作用: 让变量的值 +1

当++写在变量前面时,先自加,再运算

image-20220327100446017

当++写在变量后面时,后置自增,先使用后再加 (++在后面,后自增)

image-20220327100557068

  • 自减

符号:让变量减 - 1

后置自减:先运算,后自减

let num = 10; num--
console.log(num-- + 1)  // 11    先运算,后自减
console.log(num)   //9

原理分析:

image-20220327101532748

一元运算符面试题

let num = 1
console.log(i++ + ++i + i)  //7
分析:
1            3         3
(i++)     (++i)      (i)
i = i + 1  i = i + 1  
i =2       i = 3

一元运算符关键在于:先输出,还是先运算

image-20220327104422661

image-20220327104520690

  • 例题
 
          // 区别在于,先运算,还是先自增自减,看清楚
        let num = 10
        console.log('num--  ----->  ', num--);  //10
        console.log('num++  ----->  ', num++);  //9
        console.log('num  ----->  ', num);   //10
        let num1 = 100
        ++num1
        console.log('++num1  ----->  ', num1); //101
        // num1--
        // console.log('  ----->  ', num1);  //100
        console.log('  ----->  ',num1-- ); //101
        let i = 1
        console.log('i++  ----->  ', i++);  //1  先输出后自加
        console.log('i--  ----->  ', i--);  //2  先输出后自减
        console.log('i  ----->  ', i);   //1

比较运算符

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

  • 比较运算符 :比较后是一个布尔类型

    console.log(3 > 100)   //false
    console.log(3 < 100)   //true
    
>
<
>=
<=
==       :左右两边是否相等,将两边的数据进行转换为数值  注意:两个等于号(==),只会判断值,不会判断类型
===       :全等号,除数值相等外,数据类型也要一致(如字符串型)  全等号 ,既要判断类型又要判断值
!=        :不等号    
!==    

注意:判断等于要用两个==号,一个等于号为赋值

let num = 1
console.log(num == 2)  //false

易错点:字符串和数字判断

let num = 2,num1 = "2"
console.log(num== num1)  //true   -----注意:两个等于号(==),只会判断值,不会判断类型
console.log(num=== num1) //false  ------全等号 ,既要判断类型又要判断值
console.log(100 != 100) //false
console.log(100 != '100')  //false  ----!=全部判断
console.log(100 !== '100')  //true  ---全等号

image-20220327105927756

  • 字符串比较

是比较字符对应ASCII表

比较一般是对数字做比较

对应字符串做比较,更多是判断两者是否相等

先把字符串 拿去转数字

转完数字之后,才根据数字做比较

console.log("A">"B") // 81>82

console.log("斌斌">"万旺") //true

image-20220327111715357

注意:几个特殊的 NaN不等于任何值,包括它本身

console.log(NaN === NaN)  //false  不能看两者代码一致就相等(不是数字)
如第一是 狗  第二个是猫   

js 处理小数 有精度问题 :小数之间不要做比较 后面会补充

console.log(0.4 + 0.2 === 0.6)   //   不要对小数做比较,有精度问题

不同类型之间会发生隐式转换

console.log(4 > "3")  //会有以下的默认转换
console.log(1 > Number("3"))   //这样比较严谨

三种等号之间有什么样色区别?

  • = : 一个等号是赋值
  • == : 两个等号是判断是否相等,不判断类型
  • === : 三个等号表示全等号即判断类型又要判断数字是否相等

image-20220327113051957

逻辑运算符

与(&&) 或(||) 非(!)

作用:如果判断一个数据大于10,小于20,怎么办

错误写法:10<数据<20

image-20220327115049783

逻辑&&

名称:逻辑与 又称:“并且”

特点:两边都为true ,结果才为true,一个为假则为假

let num = 10
console.log(num>5 && num < 10)  //true  一假则假
console.log(num>20 && num < 10)  //false  一假则假

逻辑或||

名称:逻辑与 又称:“或”

特点:一边为true ,结果才为true,一个为真则为真

let num = 5
console.log(num>50 || num < 10)  //true  一真则真
console.log(num>20 || num < 1)  //false  两假则假

名称:逻辑非 又称:“取反”

特点:为条件的反值 ,结果为true,取反后为false

短路运算

&& 与||才有短路运算

  • && 从左到右 碰到false就短路(右边不执行了) 前面判断满足条件,就执行后面判断
  • || 从左往右 碰到true就短路(右边不执行了) 前面判断不满足,就执行后面判断
      // && 与||才有短路运算
        // &&   一假则假   左边假则右边不执行
        let rain = false
        rain&& console.log('为true就去学校  ----->  ', 为true就去学校);  //左边成立,右边才执行
        // ||  或  左边成立,右边就不执行
        console.log('1>10 ||4>3 || 2 > 1 || 2 >1000    //当从----->  ', 1>10 ||4>3 || 2 > 1 || 2 >1000);  //当从左到右,有一个为真,右边不执行

逻辑运算的最终结果

let result = 100 > 0 &&  1 > 1000 
console.log(result)  // false
let res = 10 > 1 && 30
console.log(res)  // 30     ----运算结果都是最后被执行的结果的那段代码
 //运算结果都是最后被执行的表达式值,一般用在变量赋值 
let result1 = 1 >0 && false && 30  //false   那段代码是最后执行即可  逻辑运算的最终结果

  • 转布尔类型为false
undefined  如果 转换成  布尔类型  是个false
console.log(Boolean(undefined))   //false
 那些值转成布尔类型后 false
undefined  null 0 ""(单双引号都行,里面为空) false NaN 其余为true
console.log(Boolean(null))
console.log(Boolean(0))
console.log(Boolean(""))
console.log(Boolean(false))
console.log(Boolean(NaN))

image-20220327144954339

image-20220327145244942

image-20220327145647141

image-20220327145601665

练习-判断输入一个数是4的倍数,且不是100的倍数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>判断一个数是4的倍数,且不是100的倍数</title>
</head>
<body>
    <script>

        //1,获取输入值
        //2, 能被4整除     注意:整除和不整除的区别在于 a % b == 0  等于0 为可以正常

        let num = prompt('输入数值')
        // if(num % 4 === 0 && num % 100 !== 0) {
        //     console.log('num 是4的被数,且不是100的倍数 ----->  ', num);
        // } else if(num % 4 === 0 && num % 100 === 0){
        //     console.log('num 是4的倍数,且是100的倍数 ----->  ', num);
        // } else {
        //     console.log('  num-----> 都不能整除 ', );
        // }

        
        // 或者   逻辑与  还是逻辑或  
        // 数一数有几个条件
        // console.log('  ----->  ', (条件一)&& (条件二));
        console.log('  ----->  ', num % 4 === 0 && num % 100 !== 0);
        // 总结:
        // 1;逻辑与还是逻辑或
        // 2:当前是几个判断条件
        // 3:写出大体的结构
        // 4按个往里面填充我们的代码即可
    </script>
</body>
</html>

image-20220327150343787

  • 整除和不整除的关系
      // a 能被 b 整除  =  a % b  
        // 若整数b 除以非0整数a,商为整数,且余数为零 ,b为被除数,a 为除数   。读作 :a 整除 b  或者  b能被 a 整除
         b / a
        // b 能被 a整除
        // a 整除 b
       ( num / 4)  (num /100)
        (num % 4 === 0)  &&  (num % 100 !== 0)

运算符的优先级

优先级 运算符 顺序

1 小括号 ()

2 一元运算符 ++ -- (逻辑非运算符最高)

3 算术运算符 先* /后+ -

4 关系运算符 > >= < <=

5 相等运算符 == !== === !==

6

image-20220327154855850

简化代码

let a = 3 > 5 && 2 < 7 && 3 === 4;
let b = 3 > 5 
let c = 2 < 7
let d = 3 === 4
console.log(b && c && d)

image-20220327155249441

image-20220327155521423

image-20220327160514849

image-20220327154327016

语句

表达式和语句

表达式:一组代码的组合,JS会计算出一个结果

语句:js整句或者命令 ,js语句以分号结束(可以省略) if语句,for循环语句

区别:表达式计算出一个值,但语句用来自行使某件事发生(做什么)

表达式: 如 1 + 2

语句: alert() 弹框对话框

有些情况:可以把表达式理解为语句,因为在计算结果,也是做事

分支语句

1.程序三大流程控制语句

从上往下执行语句,叫顺序结构

有时根据条件选择执行代码,叫分支结构

某段代码被重复执行,叫循环结构

分支语句--可以选择执行想要的代码

  • 分支语句包含 :if分支语句 三元运算符

if语句

image-20220327162048529

  • 单分支语句
let sore =  prompt('输入分数')
if(sore > 700) {
    console.log('走,去黑马去')
}

能使用if语句执行满足条件的代码

  • 双分支if语法
if(条件){
满足条件执行的代码}  else{
    不满足条件执行的代码
}


   let sore = prompt("输入分数")
        if(sore > 700){
            alert('恭喜你考入黑马,成功走上人生巅峰')
        }else{
            alert('完犊子分数考太低,回去种田去')
        }
  • 多分支语句

    先判断条件一,满足就执行条件一,其它不执行 if(条件一){代码}

    条件一不满足,满足条件二,执行条件二 else if(条件二){代码}

    条件一,条件二都不满足,满足条件三,执行条件三 else if(条件三){代码}

    。。。。 else if(条件n){代码}

    都不满足 : 执行else {代码}

           let day = +prompt('今天几号')
              if(day > 0 && day <= 7){
                  alert('吃软饭')
              }
              else if(day > 7 && day < 1000) {
                  alert('吃海鲜大餐')
              }
              else if(day >= 1000 && day < 10000) {
                  alert('白米饭')
              }
              else if(day < 0 && day > -10000) {
                  alert('吃牢饭')
              }
              else{
                  alert('想什么呢,去讨饭吧')
              }

image-20220327162734279

image-20220327162658502

三元运算符

利用三元运算符执行满足条件的语句

比if双分支 更简单 的写法 有时候叫做三元表达式

符号: ?与:配合使用

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

用来取值

判断2个数的最大值

let num1 = 10,num2 = 100
//三元表达式
num1 < num2 ? "num1小于num2" : "num1大于num2"
num1 < num2 ? console.log("num1小于num2") : console.log("num1大于num2")

用来取值

let num1 = 10,num2 = 100,num3   //num1和num2中大的值
num3 = ((num1 < num2) ? num1 : num2)
console.log(num3)

image-20220327165850333

数字补0案例

        let num1 = +prompt('输入数字');
        let num2 = num1 < 10 ? '0' + num1 : num1;
        alert(num2);
      //   es6新语法  字符串的补零方法
    //   let num1 = prompt('输入数字');
    //   let num3 = num1.padStart(2, '0');
    //   console.log('num3  ----->  ', num3);
    //   alert(num3);

padStart(2,"0")

es6 的字符串补零方法 字符串.padStart(2,"0")

image-20220327173251268

image-20220327170018917

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>补零</title>
  </head>
  <body>
    <script>
        分析
        // 1.获取用户输入的第一个数
        // let num = +prompt('输入时间')
        // 2.如果是if(三元运算符)
        // 条件?执行代码1:执行代码2
        // num < 10?"补零":""
        // 0 + num = num = 8

        // let num1 = +prompt('输入数字');
        // let num2 = num1 < 10 ? '0' + num1 : num1;
        // alert(num2);
      //   es6新语法  字符串的补零方法
      let num1 = prompt('输入数字');
      let num2 = prompt('输入数字');
      let num3 = prompt('输入数字');
      let num11 = num1.padStart(2, '0');
      let num22 = num2.padStart(2, '0');
      let num33 = num3.padStart(2, '0');
      console.log('num3  ----->  ', num11);
      console.log('num3  ----->  ', num22);
      console.log('num3  ----->  ', num33);
      alert(`${num11}:${num22}:${num33}`);
    </script>
  </body>
</html>

image-20220327174255825

记忆计算器

image-20220327170059063

1.分析 
1.1 获取输入的三个
前两个数字
后一个 是运算 符  加减乘除
2.判断当前的运算符是什么
if(+) 执行数字相加
else if(-) 执行数字相减
else if(*) 执行数字相乘
else if(/) 执行数字相除
注意:运算符不需要转数字型
        
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
                let num1 = +prompt('输入数字')
                let num2 = +prompt('输入数字')
                let num3 = prompt('输入运算符')
                if(num3 === "+"){
                    alert(num1 + num2)
                    document.write(num1 + num2)
                }
                else if(num3 === "-") {
                    alert(num1 - num2)
                    document.write(num1 - num2)
                }
                else if(num3 === "*") {
                    alert(num1 * num2)
                    document.write(num1 * num2)
                }
                else if(num3 === "/") {
                    alert(num1 / num2)
                    document.write(num1 / num2)
                } 
                else {
                    alert("符号错误,只能输出加减乘除")
                }
    </script>
</body>
</html>

image-20220327175314511

image-20220327180540147

image-20220327180614753

image-20220327180711484

image-20220327180804604

image-20220327180826741

image-20220327180953750

image-20220327181158046

image-20220327181418957

image-20220327181459344

image-20220327181514363

image-20220327181746490

image-20220327181820208

易错

console.log("5"+3,"5"- 3)  // "53" ,2
let a = 1;let b = ++a + ++a ;console.log(b) //5
“==”在比较两边值时,不需要比较两边的数据
NaN == NaN结果是false
200 == “200”  结果是true
undefined === undefined 结果是true
let s = 200&&"hello" 输出“hello”  相当于 console.log(s)
let num = 10 num += 5 let res = num++  console.log(res)  console.log(num) //15,16
let num = 5;let res = ++num + num++ ;console.log(res)  //12
let num = {}  console.log({})  //{}   console.log(!{})  //false
!!5  console.log(!!5)  //true
!""   console.log(!"")  //true

image-20220327191732238

image-20220327192235373