二 JavaScript之運算符

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/ab20514/article/details/51065940

一.什麼是表達式

  • 表達式是ECMAScript中的一個“短語”,解析器會通過計算把它轉換成一個值。最簡單的表達式是字面量或者變量名。例如:
5.96                            //數值字面量
'Lee'                           //字符串字面量
true                            //布爾值字面量    
null                            //空值字面量
/Java/                          //正則表達式字面量
{x:1, y:2}                      //對象字面量、對象表達式
[1,2,3]                         //數組字面量、數組表達式
function(n) {return x+y;}       //函數字面量、函數表達式
box                             //變量
  • 通過合併簡單的表達式來創建複雜的表達式。比如:
box + 5.96                      //加法運算的表達式
typeof(box)                     //查看數據類型的表達式
box > 8                         //邏輯運算表達式
  • 單一的字面量和組合字面量的運算符都可稱爲表達式

二.一元運算符

  • 只能操作一個值的運算符叫做一元運算符

    • 1.遞增++和遞減–
    • 2.前置和後置的區別
      • 沒有賦值操作,前置和後置是一樣的
      • 有賦值操作時
        • 前置的運算符會先累加(累減)再賦值
        • 後置運算符則先賦值再累加或累減
    var box = 100; 
    var age = ++box;                   //age值爲101
    var height = box++;            //height值爲100
    
    • 3.其他類型應用一元運算符的規則

      var box = '89';    box++;           //90,數值字符串自動轉換成數值
      var box = 'ab'; box++;           //NaN,字符串包含非數值轉成NaN
      var box = false; box++;          //1,false轉成數值是0,累加就是1
      var box = 2.3; box++;            //3.3,直接加1
      var box = {                          //1,不設置toString或valueOf即爲NaN
      toString : function() {
          return 1;
      }
      };          box++;
      
    • 4.加和減運算符

      var box = 100; +box;                //100,對於數值,不會產生任何影響
      var box = '89'; +box;               //89,數值字符串轉換成數值
      var box = 'ab'; +box;               //NaN,字符串包含非數值轉成NaN
      var box = false; +box;          //0,布爾值轉換成相應數值
      var box = 2.3; +box;                //2.3,沒有變化
      var box = {                     //1,不設置toString或valueOf即爲NaN
      toString : function() {
          return 1;
      }
      };          +box;
      

三.算術運算符

  • 1.加法
var box = 1 + 2;                    //等於3
var box = 1 + NaN;                  //NaN,只要有一個NaN就爲NaN
var box = Infinity + Infinity;      //Infinity
var box = -Infinity + -Infinity;    //-Infinity
var box = Infinity + -Infinity;     //NaN,正無窮和負無窮相加等NaN
var box = 100 + '100';              //100100,字符串連接符,有字符串就不是加法
var box = '您的年齡是:' + 10 + 20;   //您的年齡是:1020,被轉換成字符串
var box = 10 + 20 + '是您的年齡';        //30是您的年齡,沒有被轉成字符串
var box = '您的年齡是:' + (10 + 20); //您的年齡是:30,沒有被轉成字符串
var box = 10 + {};             //10[object Object]類型是string
var box = 10 + 對象               //10[object Object],如果有toString()或valueOf(),則返回10+返回數的值
  • 2.減法
var box = 100 - 70;                 //等於30
var box = -100 - 70                 //等於-170
var box = -100 - -70                //-30,一般寫成-100 - (-70)比較清晰
var box = 1 - NaN;                  //NaN,只要有一個NaN就爲NaN
var box = Infinity - Infinity;          //NaN
var box = -Infinity - -Infinity;        //NaN
var box = Infinity - -Infinity;         //Infinity
var box = -Infinity - Infinity;         //-Infinity
var box = 100 - true;               //99,true轉成數值爲1
var box = 100 - '';                 //100,''轉成了0
var box = 100 - '70';               //30,'70'轉成了數值70
var box = 100 - null;               //100,null轉成了0
var box = 100 - 'Lee';              //NaN,Lee轉成了NaN
var box = 100 - 對象              //NaN,如果有toString()或valueOf()
 則返回10-返回數的值
  • 3.乘法
var box = 100 * 70;                 //7000          
var box = 100 * NaN;                //NaN,只要有一個NaN即爲NaN
var box = Infinity * Infinity;          //Infinity
var box = -Infinity * Infinity ;        //-Infinity
var box = -Infinity * -Infinity ;       //Infinity
var box = 100 * true;               //100,true轉成數值爲1
var box = 100 * '';                 //0,''轉成了0
var box = 100 * null;               //0,null轉成了0
var box = 100 * 'Lee';              //NaN,Lee轉成了NaN
var box = 100 * 對象              //NaN,如果有toString()或valueOf()
 則返回10 - 返回數的值
  • 4.除法
var box = 100 / 70;                 //1.42....
var box = 100 / NaN;                //NaN
var box = Infinity / Infinity;          //NaN
var box = -Infinity / Infinity ;        //NaN
var box = -Infinity / -Infinity;        //NaN
var box = 100 / true;              //100,true轉成1
var box = 100 / '';                //Infinity,
var box = 100 / null;              //Infinity,
var box = 100 / 'Lee';             //NaN
var box = 100 / 對象;            //NaN,如果有toString()或valueOf(),則返回10 / 返回數的值

  • 5.求模
var box = 10 % 3;                   //1,餘數爲1            
var box = 100 % NaN;                //NaN
var box = Infinity % Infinity;          //NaN           
var box = -Infinity %  Infinity ;       //NaN
var box = -Infinity %  -Infinity;       //NaN
var box = 100 %  true;              //0
var box = 100 %  '';                //NaN
var box = 100 %  null;              //NaN
var box = 100 %  'Lee';             //NaN
var box = 100 %  對象;                //NaN,如果有toString()或valueOf(),則返回10 % 返回數的值

四.關係運算符

  • 用於進行比較的運算符稱作爲關係運算符:小於(<)、大於(>)、小於等於(<=)、大於等於(>=)、相等(==)、不等(!=)、全等(恆等)(===)、不全等(不恆等)(!==)

  • 關係運算符操作非數值時要遵循一下規則:

    • 1.兩個操作數都是數值,則數值比較;
    • 2.兩個操作數都是字符串,則比較兩個字符串對應的字符編碼值;
    • 3.兩個操作數有一個是數值,則將另一個轉換爲數值,再進行數值比較;
    • 4.兩個操作數有一個是對象,則先調用valueOf()方法或toString()方法,再用結果比較;
var box = 3 > 2;                    //true
var box = 3 > 22;                   //false
var box = '3' > 22;                 //false
var box = '3' > '22';               //true
var box = 'a' > 'b';                //false  a=97,b=98
var box = 'a' > 'B';                //true  B=66
var box = 1 > 對象;               //false,如果有toString()或valueOf(),則返回1 > 返回數的值

  • 在相等和不等的比較上,如果操作數是非數值,則遵循一下規則:
    • 1.一個操作數是布爾值,則比較之前將其轉換爲數值,false轉成0,true轉成1;
    • 2.一個操作數是字符串,則比較之前將其轉成爲數值再比較;
    • 3.一個操作數是對象,則先調用valueOf()或toString()方法後再和返回值比較;
    • 4.不需要任何轉換的情況下,null和undefined是相等的;
    • 5.一個操作數是NaN,則==返回false,!=返回true;並且NaN和自身不等;
    • 6.兩個操作數都是對象,則比較他們是否是同一個對象,如果都指向同一個對象,則返回true,否則返回false。
    • 7.在全等和全不等的判斷上,比如值和類型都相等,才返回true,否則返回false。

五.邏輯運算符

  • 邏輯運算符通常用於布爾值的操作,一般和關係運算符配合使用,有三個邏輯運算符:邏輯與(AND)、邏輯或(OR)、邏輯非(NOT)

    • 1.邏輯與(AND) :&&

      • 如果兩邊的操作數有一個操作數不是布爾值的情況下,與運算就不一定返回布爾值,此時,遵循已下規則:
        • 1.第一個操作數是對象,則返回第二個操作數;
        • 2.第二個操作數是對象,則第一個操作數返回true,才返回第二個操作數,否則返回false;
        • 3.有一個操作數是null,則返回null;
        • 4.有一個操作數是undefined,則返回undefined。
          var box = 對象 && (5 > 4);          //true,返回第二個操作數
          var box = (5 > 4) && 對象;           //[object Object]
          var box = (3 > 4) && 對象;           //false
          var box = (5 > 4) && null;         //null
          
    • 2.邏輯或(OR):||

      • 如果兩邊的操作數有一個操作數不是布爾值的情況下,邏輯與運算就不一定返回布爾值,此時,遵循已下規則:
        • 1.第一個操作數是對象,則返回第一個操作數;
        • 2.第一個操作數的求值結果爲false,則返回第二個操作數;
        • 3.兩個操作數都是對象,則返回第一個操作數;
        • 4.兩個操作數都是null,則返回null;
        • 5.兩個操作數都是NaN,則返回NaN;
        • 6.兩個操作數都是undefined,則返回undefined;
          var box = 對象 || (5 > 3);            //[object Object]
          var box = (5 > 3) || 對象;            //true
          var box = 對象1 || 對象2;           //[object Object]
          var box = null || null;                 //null
          var box = NaN || NaN;               //NaN
          var box = undefined || undefined;      //undefined
          
    • 3.邏輯非(NOT):!

      • 邏輯非運算符可以用於任何值。無論這個值是什麼數據類型,這個運算符都會返回一個布爾值。它的流程是:先將這個值轉換成布爾值,然後取反,規則如下:
        • 1.操作數是一個對象,返回false;
        • 2.操作數是一個空字符串,返回true;
        • 3.操作數是一個非空字符串,返回false;
        • 4.操作數是數值0,返回true;
        • 5.操作數是任意非0數值(包括Infinity),false;
        • 6.操作數是null,返回true;
        • 7.操作數是NaN,返回true;
        • 8.操作數是undefined,返回true;
          var box = !(5 > 4);             //false
          var box = !{};                       //false
          var box = !'';                       //true
          var box = !'Lee';                   //false
          var box = !0;                       //true
          var box = !8;                       //false
          var box = !null;                    //true
          var box = !NaN;                 //true
          var box = !undefined;           //true
          

六.*位運算符

  • 位運算符有七種,分別是:位非NOT(~)、位與AND(&)、位或OR(|)、位異或XOR(^)、左移(<<)、有符號右移(>>)、無符號右移(>>>)
var box = ~25;                 //-26
var box = 25 & 3;               //1
var box = 25 | 3;               //27
var box = 25 << 3;              //200
var box = 25 >> 2;              //6
var box = 25 >>> 2;             //6

七.賦值運算符

  • 賦值運算符用等於號(=)表示,就是把右邊的值賦給左邊的變量。
var box = 100;                  //把100賦值給box變量
  • 複合賦值運算符通過x=的形式表示,x表示算術運算符及位運算符
var box = 100;
box = box +100;                 //200,自己本身再加100

這種情況可以改寫爲:
var box = 100;                  
box += 100;                     //200,+=代替box+100

八.其他運算符

  • 1.字符串運算符
    • 字符串運算符只有一個,即:”+”。它的作用是將兩個字符串相加
    • 規則:至少一個操作數是字符串即可
var box = '100' + '100';                //100100
var box = '100' + 100;              //100100
var box = 100 + 100;                //200
  • 2.逗號運算符
    • 逗號運算符可以在一條語句中執行多個操作。
var box = 100, age = 20, height = 178;  //多個變量聲明
var box = (1,2,3,4,5);              //5,變量聲明,將最後一個值賦給變量,不常用
var box = [1,2,3,4,5];              //[1,2,3,4,5],數組的字面量聲明
var box = {                     //[object Object],對象的字面量聲明
                    1 : 2,
                    3 : 4,
                    5 : 6
};
  • 3.三元條件運算符
    • 三元條件運算符其實就是後面將要學到的if語句的簡寫形式。
var box = 5 > 4 ? '對' : '錯';        //對,5>4返回true則把'對'賦值給box,反之。

九.運算符優先級

- 優先級遵循以下順序:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章