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>

八、运算符优先级

优先级从高到低

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

  • 、!=、=、!===
  • &&
  • ||
  • =
原文地址:https://www.cnblogs.com/xiaoaitongxue/p/12739589.html