JS运算,运算符

 1.当对非number类型的值进行运算:
     1>会将这些值转换为Number然后再运算  
                   result = true + 1 //2 result = 2 + null;//2
      2>任何值和NaN做运算结果都是NaN   
                  result=2+NaN;//NaN                                                           
      3> 如果对两个字符串进行加法,则会进行拼块操作 
                  result="123"+"456";//"123456"     
      4>任何值和字符串相加,都会先将值转化为字符串再拼接 
                  result =123+"1";//"1231"  
      5>可以将任意数据 + 一个 " "即可将其转为String,这是一种隐式的类型转 
        换,由浏览器览器自动完成,实际上它也是调用String()函数  
        var c =123;  c=c + " ";//"123"  result=1+2+"3";//"33"  result="1"+2+3;//"123"

 2.  100-true//99  100-"1"//99

 3.   2*"8";//16  2*NaN//NaN 2*undefined//NaN  2*null//0 

      1>任何数做 - * / 运算都会自动转化为Number 可以利用这一特点做隐式的 
          类型转换 -0 *1  /1来将其转化为Number,原理和Number()函数一样,用 
          起来更加简单

      2>% 取模运算(取余数)

4.  一元运算符,只需要一个操作数 

      1> + 正号,正号不会对数字产生任何影响  
           - 负号 ,负号可以对数字进行负号的取反  

      2>对于非Number类型的值,它会将其先转化为 Number,然后在运算,可 
          以对一个其他的数据类型使用+,来将其转化为 number,它的原理和 
          number()函数一样         1+ +“2” +3;//6

5.自增 ++ 
      1>通过自增可以使变量在自身基础上增加1

      2>对于一个变量自增以后,原变量的值会立即自增1

      3>自增分为后加加(a++)  前加加(++a),无论是哪种,都会立即使原变量的 
        值自增1,

      4>不同的是++a和a++的值不同
                     a++的值等于原变量的值(自增前的值), 
                     ++a的值原 变量新值(自增后的值)  
                     var d=20; d++ +  ++d + d;//20+22+22

6.自减 --  
     1>通过自减可以使变量在自身基础上减1  

     2>自减分为后减减(a--)  前减减(--a),无论是哪种,都会立即使原变量的值 
          自减1, 

     3>不同的是--a和a--的值不同
                   a--的值等于原变量的值(自减前的值)
                   --a的值原变量 新值(自减后的值) 

7.逻辑运算符 
     1>  !非    所谓非运算就是对布尔值进行取反操作
                      true变false,false变true
                      如果对一个值进行两次取反,他不会改变

                      如果对非布尔值进行取反,则会将其转化为布尔值,然后再取 
                      反,所以我们可以利用该特点,来将一个其他的数据类型转化为 
                      布尔值,可以为任意一个数据类型取两次反,来将其转化为布尔 
                      值,原理和Boolean()函数一样
                                     var a = "hello";
                                     a = !!a; //true

     2> && 与   可以对符号两侧的值进行与运算并返回结果
                      只有两端的值都为true时,才会返回true。只要有一个false就会返回false。

                      与是一个短路的与,如果第一个值是false,则不再检查第二个值,第一个true会检查第二个

                      对于非布尔值,它会将其转换为布尔值然后做运算,并返回原值
                         规则:
                            1.如果第一个值为false,则返回第一个值    0&&1;//0
                            2.如果第一个值为true,则返回第二个值  5&&6;//6  

     3> ||  或   可以对符号两侧的值进行或运算并返回结果
                     只有两端都是false时,才会返回false。只要有一个true,就会返回true。

                     或是一个短路的或,如果第一个值是true,则不再检查第二个值,第一个false会检查第二个

                     对于非布尔值,它会将其转换为布尔值然后做运算,并返回原值
                         规则:    
                            1.如果第一个值为true,则返回第一个值   2||1;//2
                            2.如果第一个值为false,则返回第二个值  NaN || 1;//1

 8.赋值运算符:
                       = +=  -= *= /= %=

 9.关系运算符
                     关系运算符用来比较两个值之间的大小关系的 
                         >= > = <= <
                     如果关系成立则返回true,关系不成立则返回false。

                     如果比较的两个值是非数值,会将其转换为Number然后再比较。

                     任何值和NaN作比较都是false

                    如果比较的两个值都是字符串,此时会比较字符串的Unicode编 
                    码,而不会转换为Number
                                 一位一位进行比较,两位一样,则比较下一位,所以使用 
                                 它来对英文进行排序,比较中文没有意义
                                 "11"<"5";//true(第一位先比较即是1和5比较编码大小)

 10.相等运算符
    ==
        - 相等,判断左右两个值是否相等,如果相等返回true,如果不等返回false
        - 相等会自动对两个值进行类型转换,如果对不同的类型进行比 
          较,会将其转换为相同的类型然后再比较,转换后相等它也会返回true

    !=
        - 不等,判断左右两个值是否不等,如果不等则返回true,如果相等则返回false
        - 不等也会做自动的类型转换。
        
    ===
        - 全等,判断左右两个值是否全等,它和相等类似,只不过它不会进行自动的类型转换,
          如果两个值的类型不同,则直接返回false
            
    !==
        - 不全等,和不等类似,但是它不会进行自动的类型转换,
          如果两个值的类型不同,它会直接返回true
        
    特殊的值:
        - null和undefined
            - 由于undefined衍生自null,所以null == undefined 会返回true。
                但是 null === undefined 会返回false。
                
        - NaN
            - NaN不与任何值相等,包括它自身 NaN == NaN //false
            
        - 判断一个值是否是NaN
            - 使用isNaN()函数

11.条件运算符(三元运算符):
        - 语法:条件表达式?语句1:语句2;
        - 执行流程:
            先对条件表达式求值判断,
                如果判断结果为true,则执行语句1,并返回执行结果
                如果判断结果为false,则执行语句2,并返回执行结果

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

12  ,  运算符  
        使用逗号可以分割多个语句,一般可以在申明多个变量时使用
                  var a, b,c;

        可以同时申明多个变量并赋值
                  var a=1,b=2,c=3;          

13.运算符优先级:
    - 和数学中一样,JS中的运算符也是具有优先级的,
        比如 先乘除 后加减 先与 后或
                       var result 1||2&&3;//1
    - 具体的优先级可以参考优先级的表格,在表格中越靠上的优先级越高,
        优先级越高的越优先计算,优先级相同的,从左往右计算。

    - 优先级不需要记忆,如果越到拿不准的,使用()来改变优先级。
优先级.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。