05-JavaScript運(yùn)算符

運(yùn)算符基本概念

  • JavaScript運(yùn)算符的概念和C語言一樣, 都是告訴程序執(zhí)行特定算術(shù)或邏輯操作的符號(hào)。

運(yùn)算符分類

  • JavaScript運(yùn)算符的分類和C語言也一樣

  • 按照功能劃分:

    • 算術(shù)運(yùn)算符
    • 位運(yùn)算符
    • 關(guān)系運(yùn)算符
    • 邏輯運(yùn)算符
  • 運(yùn)算符根據(jù)參與運(yùn)算的操作數(shù)的個(gè)數(shù)分為

    • 單目運(yùn)算
    • 雙目運(yùn)算
    • 三目運(yùn)算

運(yùn)算符的優(yōu)先級(jí)和結(jié)合性

  • 優(yōu)先級(jí)
    • JavaScript運(yùn)算符的優(yōu)先級(jí)和C語言也一樣
    • JavaScript中,運(yùn)算符的運(yùn)算優(yōu)先級(jí)共分為15 級(jí)。1 級(jí)最高,15 級(jí)最低。
    • 在表達(dá)式中,優(yōu)先級(jí)較高的先于優(yōu)先級(jí)較低的進(jìn)行運(yùn)算。
    • 在一個(gè)運(yùn)算量兩側(cè)的運(yùn)算符優(yōu)先級(jí)相同時(shí),則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理
運(yùn)算符 描述
() 表達(dá)式分組
++ -- - ~ ! 一元運(yùn)算符
* / % 乘法、除法、取模
+ - + 加法、減法、字符串連接
<< >> >>> 移位
< <= > >= 小于、小于等于、大于、大于等于
== != === !== 等于、不等于、嚴(yán)格相等、非嚴(yán)格相等
& 按位與
^ 按位異或
| 按位或
&& 邏輯與
|| 邏輯或
?: 條件
= += -= *= /= %= 賦值運(yùn)算
, 多重求值
  • 結(jié)合性
    • JavaScript運(yùn)算符的結(jié)合性和C語言也一樣
    • 即左結(jié)合性(自左至右)和右結(jié)合性(自右至左)。

算術(shù)運(yùn)算符

  • JavaScript算術(shù)運(yùn)算符和C語言也一樣
名稱 符號(hào) 說明
加法運(yùn)算符 + 對(duì)兩個(gè)值進(jìn)行加法運(yùn)算,并將結(jié)果返回
減法運(yùn)算符 - 對(duì)兩個(gè)值進(jìn)行減法運(yùn)算,并將結(jié)果返回
乘法運(yùn)算符 * 對(duì)兩個(gè)值進(jìn)行乘法運(yùn)算,并將結(jié)果返回
除法運(yùn)算符 / 對(duì)兩個(gè)值進(jìn)行除法運(yùn)算,并將結(jié)果返回
求余運(yùn)算符 (模運(yùn)算符) % 對(duì)兩個(gè)值進(jìn)行取余運(yùn)算,并將結(jié)果返回
  • 基本使用和C語言一模一樣
        var res1 = 1 + 1;
        var res2 = 1 - 1;
        var res3 = 2 * 2;
        var res4 = 10 / 3;
        var res5 = 10 % 3;
        console.log(res1); // 1
        console.log(res2); // 0 
        console.log(res3); // 4
        console.log(res4); // 3.3333
        console.log(res5); // 1
    

  • 注意點(diǎn):
    • 和C語言不同的是JavaScript中整數(shù)除以整數(shù)結(jié)果是小數(shù)

          var res4 = 10 / 3;
          console.log(res4); // 3.3333
      
    • 任何值和NaN做運(yùn)算都得NaN

      var result = 2 + NaN;
      console.log(result); //NaN
      
    • 非Number類型的值進(jìn)行運(yùn)算時(shí),會(huì)將這些值轉(zhuǎn)換為Number然后在運(yùn)算

      var result = true + 1; // + - * /  %
      console.log(result); // 2
      result = true + false;
      console.log(result); // 1
      result = 2 + null; 
      console.log(result);// 2
      
    • 任何的值和字符串做加法運(yùn)算,都會(huì)先轉(zhuǎn)換為字符串,然后再和字符串做拼串的操作

      var result = 1 + "123";
      console.log(result); // 1123
      result = 2 + "true";
      console.log(result); // 2true
      
    • 任何的值和字符串做- * / %法運(yùn)算, 都會(huì)先轉(zhuǎn)換為字符串轉(zhuǎn)換為Number

      var result = 2 - "1"; // - * /  %
      console.log(result); // 1
      result = "2" - "1";
      console.log(result); // 1
      
    • 取余運(yùn)算m%n, n等于0 返回NaN, 其它和C語言一樣

      var result = 10 % 0;
      console.log(result); // NaN
      

正負(fù)運(yùn)算符

    • 正號(hào)
    • + 正號(hào)不會(huì)對(duì)數(shù)字產(chǎn)生任何影響
      var num = 123;
      num = +num;
      console.log(num); // 123
      
    • 對(duì)于非Number類型的值,會(huì)將先轉(zhuǎn)換為Number,然后再運(yùn)算
      var bool = true;
      var res = +bool;
      console.log(res); // 1
      
      var str = "123";
      res = +str;
      console.log(res); // 123
      
      var str2 = "123abc";
      res = +str2;
      console.log(res); // NaN, 所以內(nèi)部不是調(diào)用parseInt, 而是Number()函數(shù)
      
      var temp = null;
      res = +temp;
      console.log(res); // 0
      
  • 負(fù)號(hào)
    • - 負(fù)號(hào)可以對(duì)數(shù)字進(jìn)行負(fù)號(hào)的取反
      var num = 123;
      num = -num;
      console.log(num); // -123
      

賦值運(yùn)算符

  • JavaScript賦值運(yùn)算符和C語言也一樣
優(yōu)先級(jí) 名稱 符號(hào) 說明
14 賦值運(yùn)算符 = 雙目運(yùn)算符,具有右結(jié)合性
14 除后賦值運(yùn)算符 /= 雙目運(yùn)算符,具有右結(jié)合性
14 乘后賦值運(yùn)算符 (模運(yùn)算符) *= 雙目運(yùn)算符,具有右結(jié)合性
14 取模后賦值運(yùn)算符 %= 雙目運(yùn)算符,具有右結(jié)合性
14 加后賦值運(yùn)算符 += 雙目運(yùn)算符,具有右結(jié)合性
14 減后賦值運(yùn)算符 -= 雙目運(yùn)算符,具有右結(jié)合性

自增自減運(yùn)算符

  • JavaScript自增自減運(yùn)算符和C語言也一樣
優(yōu)先級(jí) 名稱 符號(hào) 說明
2 自增運(yùn)算符(在后) i++ 單目運(yùn)算符,具有左結(jié)合性
2 自增運(yùn)算符(在前) ++i 單目運(yùn)算符,具有右結(jié)合性
2 自減運(yùn)算符(在后) i-- 單目運(yùn)算符,具有左結(jié)合性
2 自減運(yùn)算符(在前) --i 單目運(yùn)算符,具有右結(jié)合性

關(guān)系運(yùn)算符

  • JavaScript關(guān)系運(yùn)算符和C語言也一樣
  • 和C語言不同的是, JavaScript中的關(guān)系運(yùn)算符只會(huì)返回true或false
優(yōu)先級(jí) 名稱 符號(hào) 說明
6 大于運(yùn)算符 > 雙目運(yùn)算符,具有左結(jié)合性
6 小于運(yùn)算符 < 雙目運(yùn)算符,具有左結(jié)合性
6 大于等于運(yùn)算符 >= 雙目運(yùn)算符,具有左結(jié)合性
6 小于等于運(yùn)算符 <= 雙目運(yùn)算符,具有左結(jié)合性
7 等于運(yùn)算符 == 雙目運(yùn)算符,具有左結(jié)合性
7 不等于運(yùn)算符 != 雙目運(yùn)算符,具有左結(jié)合性
7 不等于運(yùn)算符 === 雙目運(yùn)算符,具有左結(jié)合性
7 不等于運(yùn)算符 !== 雙目運(yùn)算符,具有左結(jié)合性
  • 注意點(diǎn):
    • 對(duì)于非數(shù)值進(jìn)行比較時(shí),會(huì)將其轉(zhuǎn)換為數(shù)字然后在比較
      console.log(1 > true); //false
      console.log(1 > false); //true
      console.log(1 > "0"); //true
      console.log(1 > null); //true
      
    • 如果符號(hào)兩側(cè)的值都是字符串時(shí),不會(huì)將其轉(zhuǎn)換為數(shù)字進(jìn)行比較, 而會(huì)分別比較字符串中字符的Unicode編碼
    • Unicode編碼轉(zhuǎn)換地址
      // a的Unicode編碼是:0061
      // b的Unicode編碼是:0062
      console.log("a" < "b");//true
      
      // 比較多位時(shí)則是從前往后一位一位比較
      // 第一位相同比較第二位, 直到比較到不一樣或者結(jié)束為止
      // c的Unicode編碼是:0063
      // 類似于C語言strcmp函數(shù), 只不過JavaScript中比較的是Unicode編碼
      console.log("ab" < "ac");//true
      
    • null、undefined 、NaN比較
      console.log(null == 0); // false
      console.log(undefined == 0); // false
      // 永遠(yuǎn)不要判斷兩個(gè)NaN是否相等
      console.log(NaN == NaN); // false
      
      /*
       * 可以通過isNaN()函數(shù)來判斷一個(gè)值是否是NaN
       *    如果該值是NaN則返回true,否則返回false
       */
      var num = NaN;
      console.log(isNaN(num)); // true
      
      // undefined 衍生自 null, 所以返回true
      console.log(null == undefined); // true;
      console.log(null === undefined); // false;
      
      // == 判斷值是否相等
      // == 會(huì)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換
      console.log("123" == 123); // true
      // === 判斷值和類型時(shí)候同時(shí)相等
      // === 不會(huì)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換
      console.log("123" === 123); // false
      

邏輯運(yùn)算符

  • JavaScript邏輯運(yùn)算符和C語言也一樣
優(yōu)先級(jí) 名稱 符號(hào) 說明
2 邏輯非運(yùn)算符 ! 單目運(yùn)算符,具有右結(jié)合性
11 邏輯與運(yùn)算符 && 雙目運(yùn)算符,具有左結(jié)合性
12 邏輯或運(yùn)算符 || 雙目運(yùn)算符,具有左結(jié)合性
  • 注意點(diǎn):
    • 對(duì)于非Boolean類型的數(shù)值, 邏輯運(yùn)算符會(huì)將其悄悄咪咪轉(zhuǎn)換為Boolean類型來判斷

    • 邏輯與

      • 如果條件A不成立, 則返回條件A的數(shù)值本身
      • 如果條件A成立, 不管條件B成不成立都返回條件B數(shù)值本身
      result =  null && 0;
      console.log(result); // null
      var result =  "123" && "abc";
      console.log(result); // "abc"
      result =  "123" && 0;
      console.log(result); // 0
      
    • 邏輯或

      • 如果條件A不成立, 則不管條件B成不成立都返回條件B數(shù)值本身
      • 如果條件A成立, 則返回條件A的數(shù)值本身
      var  result =  null || 0;
      console.log(result); // 0
      result =  "123" || "abc";
      console.log(result); // "123"
      result =  "123" || 0;
      console.log(result); // "123"
      

逗號(hào)運(yùn)算符

  • JavaScript逗號(hào)運(yùn)算符和C語言也一樣
  • 逗號(hào)運(yùn)算符會(huì)從左至右依次取出每個(gè)表達(dá)式的值, 最后整個(gè)逗號(hào)表達(dá)式的值等于最后一個(gè)表達(dá)式的值
  • 格式: 表達(dá)式1,表達(dá)式2,… …,表達(dá)式n;
    var a, b, c, d;
    /*
    1.先計(jì)算表達(dá)式1, a = 2
    2.再計(jì)算表達(dá)式2, b = 12
    3.再計(jì)算表達(dá)式3, c = 5
    4.將表達(dá)式3的結(jié)果返回給d
    */
    d = (a = 1 + 1,b = 3 * 4, c = 10 / 2);
    console.log(d); // 5
    

三目運(yùn)算符(條件運(yùn)算符)

  • JavaScript三目運(yùn)算符和C語言也一樣
  • 格式: 條件表達(dá)式 ? 語句1 : 語句2;
    // 彈第一個(gè)
    true?alert("語句1") : alert("語句2");
    // 彈第二個(gè)
    false?alert("語句1") : alert("語句2");
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容