• 13-运算符


    一、运算符和表达式

    运算符:也叫操作符,是一种符号。通过运算符可以对一个或多个值进行运算,并获取运算结果。
    表达式:由数字、运算符、变量的组合(组成的式子)。

    二、算数运算符

    +:当+两边是数字时候,就是算数运算符,只要有一边不是数字,就是连接符
    -,*,/
    %:取模

    • 取模的使用场景--取各位上的数
      <script>
        var num = 567;
        // 个位就是直接对10取模
        var ge = parseInt(num % 10);
        // 十位就是先/10在对10取模
        var shi = parseInt(num / 10 % 10 );
        // 百位就是先/100再对10取模
        var bai = parseInt(num / 100 % 10);
        console.log(`个位${ge}十位${shi}百位${bai}`);//个位7十位6百位5
      </script>
    

    三、一元运算符

    必须是变量哦,不然会报错~!

    1.前++:++a,最终都会自增1

    • 先自增1,再参与运算。先自己发育,再gank

    2.后++:a++,最终都会自增1

    • 先将变量参与运算再自增1。先去gank,再发育

    3.前--和后--同理,都是自减1

        <script>
            var n = 3;
            var m = 5;
            var num1 = n++ + n++ + ++m + n-- - m++;
            // 参与运算的值:  n:3  n:4    m:6     n:5     m:6
            // 自身值:        n:4  n:5    m:6     n:4     m:7
    
            var a = 4;
            var b = 9;
            var num2 = a++ - b++ + ++b + a++ + ++b + a++;
            // 参与运算的值:a:4   b:9     b:11    a:5     b:12    a:6
            // 自身值:      a:5   b:10    b:11    a:6     b:12    a:7
    
            console.log(num1);//12
            console.log(num2);//29
        </script>
    

    四、逻辑运算符

    返回的一定是布尔类型
    包含隐式转换,非布尔类型的值会隐式转为布尔类型

    1.逻辑与&&

    表达式1 && 表达式2

    • 一假则假,只有两边都是true才返回true

    逻辑短路:原理就是因为一假则假,代码从做到右执行,当执行到第一个表达式,如果表达式1为假,那么这个返回值一定是假,就睡返回表达式1,;如果表达式1位真,就睡继续往右判断表达式2,所以返回表达式2,因为表达式2的真假决定这的返回值的真假。

    当表达式1的值为true,就返回表达式2的值
    当表达式1的值为false,就返回表达式1的值

      <script>
        // 逻辑与短路:第一个值为false,后面的代码不会执行
        false && alert('不会执行');
    
        console.log(1 && 0);//0
                    // true && false => 表达式1的值为真,就直接返回表达式2的值
    
        console.log(1 && 1 && 2 && 0 && 0);//0
                    //true && true && true && false => 当有2个以上表达时,会返回第一个为false的表达式
      </script>
    

    2.逻辑非||

    表达式1 ||表达式2

    • 一真则真,只要有一个表达式为真,就返回真

    逻辑非短路:原理与逻辑与一致
    当表达式1的值为false,就返回表达式1的值
    当表达式1的值为true,就返回表达式2的值

        // 逻辑或短路:第一个值为true,后面的代码不会执行
        true || alert('不会执行');
    
         console.log(1 || 0);//1
                // true && false => 表达式1的值为真,就直接返回表达式1的值
    
         console.log(0 || 0 || 2 || 0 || 0);//2
                  //false && false && true && false => 当有2个以上表达时,会返回第一个为true的表达式
    

    3.有一个坑

    非布尔值进行逻辑运算,会隐式转为布尔类型去判断, 但是原值不会改变!!!

    var result = 5 && 6; // 运算过程:true && true;
    console.log('result:' + result); // result:6(也就是说最后面的那个值。)
    

    4.取反

    对一个布尔值进行取反。会隐式转换

    五、赋值运算符

    • = :赋值运算符,将右边的值赋值给左边的 变量 ,左边必须是变量,5 = 5,会报错

    • +=a += 5 等价于 a = a + 5

    • -=a -= 5 等价于 a = a - 5

    • *=a *= 5 等价于 a = a * 5

    • /=a /= 5 等价于 a = a / 5

    • %=a %= 5 等价于 a = a % 5

    六、比较运算符

    返回的也是布尔类型
    也会隐式转换

    大于号
    < 小于号
    =  大于或等于
    <=  小于或等于
    ==  等于
    === 全等于
    != 不等于
    !== 不全等于

      <script>
        console.log(1 > 2);//false
        // 字符串会转为ASCII编码比较
        console.log('a' > 'A');//true
        // 逐位比较
        console.log('56' > '123');//true
        console.log('小' > '艾');//false
        // 任何值一NaN比较都是false
        console.log(NaN > -9999999);//false
    
        // ==并不严谨,会做隐式转换,将不同的数据类型,转为相同类型进行比较(大部分情况下,都是转换为数字)
        console.log(1 == '1');//true
        console.log(1 === '1');//false
    
        // NaN不等于任何东东,包括他本身
        console.log(NaN == NaN);//false
    
        // undefined 衍生自 null,所以返回true
        console.log(null == undefined);//true
        //全等在比较时,不会做类型转换,开发常用===
        console.log(null === undefined);//false
        
        console.log(3 != 8);	//true
    	  console.log(3 != "3");	//false,因为3=="3"是true,所以反过来就是false。
       	console.log(3 !== "3");	//true,应为3==="3"是false,所以反过来是true。
      </script>
    

    七、三元运算符

    条件表达式 ? 语句1 : 语句2;
    首先判断条件表达式的值:

    • 如果该值为true,则执行语句1,并返回执行结果

    • 如果该值为false,则执行语句2,并返回执行结果

    如果条件的表达式的求值结果是一个非布尔值,会将其转换为布尔值然后再运算。

      <script>
        // 需求:求三个数的最大值
        // 1.获取用户输入内容,并转为Number类型
        var a = +prompt('输入第一个数字');
        var b = +prompt('输入第二个数字');
        var c = +prompt('输入第三个数字');
        // 2.定义一个最大值
        var max;
        // 如果a > b,就将a赋值给max,否则就将b赋值给max
        // 在将max与c比较,如果max小于c就将c赋值给max
        (max = a > b ? a : b) > c ? max : max = c;
        alert(max);
      </script>
    

    八、运算符优先级

    优先级从高到低

    • ()
    • ++、--、!
    • *、/
    • +、-
    • 、>=、<、<=

    • 、!=、=、!===
    • &&
    • ||
    • =
  • 相关阅读:
    第10组 Alpha冲刺 (2/6)
    第10组 Alpha冲刺 (1/6)
    第10组(72) 需求分析报告
    团队介绍及选题报告
    实验 7 : OpenDaylight 实验 —— Python 中的 REST API 调用
    第03组 Alpha冲刺 总结
    第03组 Alpha冲刺 (6/6)
    第03组 Alpha冲刺 (5/6)
    第03组 Alpha冲刺 (4/6)
    第03组 Alpha冲刺 (3/6)
  • 原文地址:https://www.cnblogs.com/xiaoaitongxue/p/12739589.html
Copyright © 2020-2023  润新知