JS的运算符

简介: - 无其他字符的纯数值字符串转换为数值,null转换为数值0,可以将布尔值true转换1,false转换为0- 可以将空数组转换为0,可以将这个一个数值元素或者一个纯数值字符串元素转换为数值- bigInt会转换为数值- 其他任何内容转换为数值均为NaN

if语句的细节补充

  1. 补充一:如果代码块中只有一行代码,那么{}可以省略
  2. 补充二:if(...)语句会计算圆括号内的表达式,并将计算结果转换为布尔型(Boolean)

    • 转换规则和Boolean函数的规则一致
    • 数字0 / 空字符串 / “” / null / undefined / Nan都会被转换成false

      • 因为它们被称为 “假值”
    • 其他值被转换为true,所以它们被称为真值(truthy)

逻辑与或的规则

  1. 逻辑与符号:&&:
  • 只要“&&”前面的逻辑结果是false,无论“&&”后面怎么样,都返回“&&”前面的表达式;
  • 只要“&&”前面的逻辑结果是true,无论“&&”后面怎么样,返回“&&”后面的表达式;
  1. 逻辑或符号:||
  • 只要“||”前面的逻辑结果是false,无论“||”后面怎么样,都返回“||”后面的表达式。
  • 只要“||”前面的逻辑结果是true,无论“||”后面怎么样,都返回“||”前面的表达式。
  • 依靠第一个运算数,就能得出整个运算的逻辑结果,则返回第一个表达式
    依靠第二个运算数,才能得出整个运算的逻辑结果,则返回第二个表达式

数据类型转换

  1. 任何类型转换为字符串

    1. string() 构造函数转换方式

      eg:var a=1
          a=String(a)
          
          ,    // 对象调用String()强转, [object,object]任何对象强转后都是这个字符串
         var a=[1,2,3,4]     //调用了数组的一个方法join "1,2,3,4";  []强转字符串后 ""  [元素] 强转后就会变成这个元素的强字符串"元素"
         var a=[{a:1,b:2}]    // [object,object]
         var a                // undefined
         function a(){        // 函数会变成字符串函数
             
         }
          var a=464313433434354348483438n    // 大整型去除n变成字符串
         var a=Symbol()        // "Symbol()"
         a=String(a)  
      所有的隐士转换都是强转,也就是该方式
    2. number转换字符串 toSting() toFixed() 新增拓展方法

      • toString()

        var a=15
        // a.toString(进制转换)  将数值按照指定的进制转换字符串 2-36
        console.log(a.toString(16))    // F
        console.log(a.toString(2))    // 1111
        console.log(a.toString(10))    // 15    如果不写参数,默认是十进制    
        console.log(a.toString(36))    // f
        
        console.log(a.toString(几位小数))    // 保留几位小数,会四舍五入
        • 所有的数值是不能直接调用方法的,
        • 可以存储为变量,让变量调用方法,可以转换为数值型对象调用方法
        • toFixed()

          console.log(a.toFixed(几位小数))    // 保留小数会四舍五入
          console.log(a.toPrecision(保留几位))    // 四舍五入做科学计数法,如果是小数,保留数值位数,不做四舍五入,不用科学计数法;范围1-21
          console.log(a.toExponential(小数点后的位数))    // 科学技术法表示,保留小数后位数,会自动四舍五入
          a=34.567
          console.log(a.toFixed(2))
    3. 对象和数组 toString() 基础方法
  2. 任何类型转换数值

    1. Number() 强转换 数值类型中包括两种,一个是数值,一个是Nan(非数值)

      var a="3a"    //nan
      var a=null    // nan
      console.log(Number(function(){}))
      
      • 无其他字符的纯数值字符串转换为数值,null转换为数值0,可以将布尔值true转换1,false转换为0
      • 可以将空数组转换为0,可以将这个一个数值元素或者一个纯数值字符串元素转换为数值
      • bigInt会转换为数值
      • 其他任何内容转换为数值均为NaN
    2. 字符串转换为数值

      1. 全局方法

        • parseInt(要转的元素,进制) 转换为整数 将第一个参数隐士转换为字符串后再转换为整数
        • ParseFloat() 转换为浮点型
      2. 都会转换为10进制,如果没有进制,默认转换为10进制,并且将不符合的内容去掉

        console.log(parseInt("FF",16))
        console.log(parseInt("101110101",2))
        console.log(parseInt("10151",2))    // 5
        console.log(parseFloat("2.2.5"))    // 2.2
        console.log(parseFloat("3a"))    // 不能使用进制,小数点运算进制是有问题
  3. 任何类型转换为布尔值

    1. Boolean() 强转布尔值

      • "" , false , 0, undefined, null , Nan 均为false(0),其他都是1
    2. 遇到任何数组转换布尔值时,不会优先转换为字符串再转布尔,而是直接转换为布尔True
  4. 强转对象

    1. object() 只要使用object强转都会变为引用类型
    javascript中的引用类型有:

    1.object,对象;

    2.Array,数组;

    3.Function,函数;

    4.Date,日期时间类型;

    5.RegExp,正则表达式

运算

  1. 数值运算

    1. 非数值加法运算(+)

      console.log(3+true)    // number+boolean    boolean隐士转换数值
      console.log(3+undefined)    // number+undefined    undefined隐士转换数值Nan
      console.log(3+null)        // 3 null隐士转换数值为0
      console.log(3+{a:1})    // 对象会隐士转换为字符串,数值和对象字符串首尾相连
      console.log(3+[2])        // 将数组转换为字符串,首尾相连
      console.log(0+[])        // 0+'0'
      console.log(3+45879586562n)        // 错误,无法相加
      
      
      console.log("3"+true) // string+任何类型  都会将后面的类型隐士转换为字符串然后拼接
      console.log("a"+{a:1})    // a[object object]
      console.log("a"+[1])    // "a1"
      
      console.log(false+true)        // 数值相加
      console.log({a:1,b:2}+true)        // 对象和数组都会隐士转换为字符串相加
      console.log(undefined+true)    // undefined和null遇到布尔值相加都会转换为数值
      console.log([1]+[2])    // 12
    2. 所有的 - * / % 都会隐士转换为数值运算

      console.log("45"-"2")    // 43
      console.log([]-[])        // 0
      console.log('45'- null)    // 45
    3. ** 求幂

      进制使用 ** 立方根求值
      console.log(3**2)    // 9
      console.log(9**0.5)    // 3
  2. 赋值运算符和一元运算符

    1. 赋值运算符

      var a=3;
      a+=2    // 5
      a+=""    // 3
      a+=[3]    // 33
      a=a+[3]    // 33
      赋值运算符运算依照 + - * / % ** 运算符
      
      var a="5.23"
      a-=0    // 5.23
    2. 一元运算符

      a++ a-- ++a --a
              var a = 3
              var b = a = 5
              console.log(a, b);  // 5,5
              var obj = { a: 1 }
              obj = obj.a = { b: 10 }
              console.log(obj);   // { b: 10 }
              var obj = { a: 1 }
              var o = obj
              obj.a = obj = { b: 10 }
              console.log(obj);   // { b: 10 }
      // 定义变量
      var a,b,c
      var a1=3,
          b1=4,
          b1=5;
      var a2=b2=c2=3;    // 3 3 3
      
      
              // 优先级 赋值运算*=  =优先级很低
              var a = 2
              a *= 2 + 3
              console.log(a); // 10
              // 赋值运算符要是计算不了,就先进行加减计算
              var a = 3
              a = a += 2  // 5
              a += a = 4  // 7
              // 任何一元运算符,计算时都会隐式转换为数值运算
              var a="1";
              a++    // 2
      
              var a=[];
              a++;    // 1
      
              var a=[3];
              a++;    // 4
              console.log(a);
              var a=1;
                   2 + 2 + 3 + 4+  4 +5 +5 +6
              var s=++a + a+ ++a + ++a + a++ +a + a++ + a;
                  console.log(s,a);
      
                  // ++ -- 一元运算的优先级高于+ - * /
      
                  for(var i=10;i--;){
                     console.log("aa")
                  }
      
                  var arr=[1,2,3,4,5];
                  for(;arr.length;arr.length--){
                      console.log(arr[arr.length-1])
                  }
    3. 关系运算符

      • 关系运算符返回一个布尔值
      • < > <= >= == === !== !===
      • ASCII utf-8 Unicode(万国码)
              var a="aa";
              var b="ab";
              console.log(b>a);
      
              console.log("谢">"一")
      
              console.log(3>4)
              console.log(1.2<1.1999)
      
              console.log(true>1);//隐式转换为数值  false
              console.log(undefined>null);    //false
              console.log(null>undefined);    //false
              console.log({a:1}<{a:2});        //false
              console.log([3]<[4])            //true
      • == 先隐士转换为相同类型,在比较
      • === 绝对比较 先比较类型,再比较值
      // 三个完全相互相等
      console.log(""==false);    // true
      console.log(false==0);    // true
      console.log(""==0);    // true
      
      var a=[];
      var a=[""];
      var a=[0];
      // 六个可以进入条件 (number,string,undefined,null,bigint,object)
      if(a==0){
          console.log("aaa")
      }
              // 任何值与NaN都不相同
              console.log(NaN==NaN);//false
              var a="a";
              // isNaN,先隐式转换为数值,然后判断是不是NaN
              if(isNaN(a)){
                  console.log("aaa")
              }
      
              // 不隐式转换为数值,直接判断是否是NaN
              if(Number.isNaN(a)){
                  console.log("aaa")
              }
      // console.log([]==[]);//数组是引用类型,两个不同的数组,引用地址不同,false,数据类型相同,所以不隐式转换
                  // console.log([]=="");
                  // console.log([]==0)
                  // !强制隐式转换为布尔值再取反
                  // console.log([]==![]);//true
                  // console.log([2]==2);
                  // console.log([0]==false)
    4. 逻辑运算符

      • 逻辑与运算符概念:

        • true && true true

          true && false false

          false && true false

          false && false false

        • console.log(3 && 0);    // 0
      • 逻辑或运算符概念 ||

        • true || true true

          true || false true

          false || true true

          false || false false

        • console.log(0 || 3);    // 3
      • ! 逻辑非,强制隐式转换为布尔值,并且取反

                var o = 0
                if (o) {
        
                }
                if (!o) {
                    console.log('aaa');
                }
    5. 位运算符

      1. 二进制

        #FF0000FF rgba(255,255,255,1)    11111111
      2. 十进制

        • 除2取余法
        • 展开式
      3. 八进制

        • 101,011,011 => 533
      4. 十六进制

        • cd5f => 1100110101011111
      5. &运算符

        • 概念:
        • ​ 1&1 1

          ​ 1&0 0

          ​ 0&1 0

          ​ 0&0 0

        console.log(567&15)
        567 => 110010111
        15  => 000001111
        得出 000000111
        得到 17
        注意点:任何数与2的n次幂-1相与,得到的结果是这个数除以2的n次幂的余数
      6. |位运算符

        • 概念:
        • ​ 1|1 1
          ​ 0|1 1
          ​ 1|1 1
          ​ 0|0 0
        console.log(12|14)
        12 => 1100
        14  => 1110
        得出 1110
        得到 14

        注意点: 1. 任何数与2的n次幂-1相或时,得到的结果都是大于等于2的n次幂

        1. 如果这个数小于2的n次幂-1时,值就是2的n次幂-1
      7. ^ 异或运算

        • 概念:
        • 相同为0不同为1
          ​ 1^1=0
          ​ 1^0=1
          ​ 0^1=1
          ​ 0^0=1
           异或用于加密和解密
           console.log(234567^987654)
           console.log(820801^987654)
      8. ~ 位非

        • 概念: +1取负
           var a=3;
           a=~a;
           console.log(a) //-4
           // 取整
           var a=3.21;
           a=~~a;
           console.log(a)
        
           // 转换为数值并且取整
           var a="ab";
           console.log(~~a)
      9. 右移运算符

           console.log(16>>2);
           10000-->100--4
           console.log(3<<6);
           11 --> 11000000 --> 192
           console.log(2<<6);
           10 --> 10000000 --> 128

三元运算符

  • 三元运算符,如果返回布尔值时,不要三元运算符

    var a=3;
    var b=a>3 ? false : true;
    var b=!(a>3)
  • 三元运算可以多个连用

      var a=3;
      var b=a>3 ? 1 : a===3 ? 0 : -1;
  var a=4;
  var b=a>3 ? 1 : 0
  var b=Number(a>3);
  var b=~~(a>3);
  console.log(b)  // 1
  • 三元运算符优先级,优先于赋值运算符

    var a=3;
    var b=a+=   1 ? 0 : 1;    // 3
    var b=a+=   0 ? 1 : 2;    // 5
    console.log(b);
    
    var c = 245
    var d = c += 3 ? 18 : 10
    console.log(d);        // 263

条件运算符

  • 将表达式的结果转换为布尔值,如果是true进入条件,如果是false不执行条件语句
  • 条件语句中,只有一句话的时候,可以省略大括号,直接书写即可
  • 格式:

        if(表达式){
    
       }
    
        if(){
    
        }else{
    
        }
    
        if(){
    
        }else if(){
    
        }else if(){
    
        }else{
    
        }
    
         if(){
    
        }
        if(){
    
        }
        if(){
    
        }
    
  + switch case格式:

    +  表达式绝对等于对应的值时,执行对应的语句,break跳出
    +  break跳出当前条件,如果没有break,不判断下一个条件是否满足,直接进入,这叫做穿越
    +  default中不增加break

    ```JavaScript
     switch (表达式) {
         case 值1:
             break;
         case 值2:
             break;
         case 值3:
             break;
         case 值4:
             break;
         default:
    
     }
    ```

    ```JavaScript
     // 举个例子
     var a=3;
    switch(a){
        case 2:
            break;
            a===3 || a===4
        case 3:
        case 4:
            console.log("aaa");
            break;
            //穿越叠加
        case 5:
            console.log("a");
        case 6:
            console.log("b");
            break;
        default:
    }
    ```

  

  
相关文章
|
2月前
|
JavaScript 前端开发 开发者
混淆赋值运算符(=)和相等比较运算符(==, ===)(js的问题)
混淆赋值运算符(=)和相等比较运算符(==, ===)(js的问题)
18 0
|
2月前
|
存储 JavaScript 前端开发
【JavaScript技术专栏】JavaScript基础入门:变量、数据类型与运算符
【4月更文挑战第30天】本文介绍了JavaScript的基础知识,包括变量(var、let、const)、数据类型(Number、String、Boolean、Undefined、Null及Object、Array)和运算符(算术、赋值、比较、逻辑)。通过实例展示了如何声明变量、操作数据类型以及使用运算符执行数学和逻辑运算。了解这些基础知识对初学者至关重要,是进阶学习JavaScript的关键。
|
6天前
|
JavaScript 前端开发 网络架构
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
JavaScript编码之路【对象的增强、ES6新特性之函数的默认值设置 、rest参数 (剩余参数)、拓展运算符、对象与数组的解构赋值】
11 1
|
19天前
|
JavaScript 前端开发 开发者
JavaScript进阶-解构赋值与展开运算符
【6月更文挑战第19天】ES6的解构赋值与展开运算符增强了JS开发效率。解构允许直接从数组或对象提取值,简化数据提取,而展开运算符则用于合并数组和对象或作为函数参数。解构时注意设置默认值以处理不存在的属性,避免过度嵌套。展开运算符需区分数组与对象使用,勿混淆于剩余参数。通过示例展示了这两种操作在数组和对象中的应用,提升代码可读性与简洁度。
|
3天前
|
JavaScript
js【详解】typeof 运算符
js【详解】typeof 运算符
7 0
|
26天前
|
JavaScript 前端开发
JavaScript基础-运算符与条件语句
【6月更文挑战第11天】本文探讨了JavaScript中的运算符和条件语句,包括算术、比较、逻辑、赋值及三元运算符。强调了使用严格等于`===`避免类型转换错误,理解逻辑运算符短路特性和优化条件结构以提高代码可读性。通过示例展示了正确使用这些概念,以提升代码质量和维护性。
|
5天前
|
JavaScript 前端开发 数据安全/隐私保护
|
16天前
|
JavaScript 前端开发
JS常见的运算符有哪些?
JS常见的运算符有哪些?
8 0
|
2月前
|
JavaScript 前端开发
JS中运算符的算术、赋值、+、比较(不同类型之间比较)、逻辑
JS中运算符的算术、赋值、+、比较(不同类型之间比较)、逻辑
20 1
|
2月前
|
JavaScript 前端开发
js的运算符
js的运算符
30 2