05-JavaScript基礎-算數運算符

運算符基本概念

和數學中的運算符一樣, JavaScript中的運算符是告訴程序執行特定算術或邏輯操作的符號

  • 例如告訴程序, 某兩個數相加, 相減,相乘等


  • 什么是表達式
    • 表達式就是利用運算符鏈接在一起的有意義,有結果的語句;
    • 例如: a + b; 就是一個算數表達式, 它的意義是將兩個數相加, 兩個數相加的結果就是表達式的結果
    • 注意: 表達式一定要有結果

運算符分類

  • 按照功能劃分:

    • 算術運算符
    • 位運算符
    • 關系運算符
    • 邏輯運算符
  • 運算符根據參與運算的操作數的個數分為

    • 單目運算
      • 單目運算:只有一個操作數 如 : i++ !
    • 雙目運算
      • 雙目運算:有兩個操作數 如 : a+b;
    • 三目運算
      • 三目運算也稱為問號表達式 a>b ? 1 : 0;

運算符的優先級和結合性

  • 早在小學的數學課本中,我們就學習過"從左往右,先乘除后加減,有括號的先算括號里面的", 這句話就蘊含了優先級和結合性的問題
  • 優先級
    • JavaScript中,運算符的運算優先級共分為15 級。1 級最高,15 級最低。
    • 在表達式中,優先級較高的先于優先級較低的進行運算。
    • 在一個運算量兩側的運算符優先級相同時,則按運算符的結合性所規定的結合方向處理
運算符 描述
() 表達式分組
++ -- - ~ ! 一元運算符
* / % 乘法、除法、取模
+ - + 加法、減法、字符串連接
<< >> >>> 移位
< <= > >= 小于、小于等于、大于、大于等于
== != === !== 等于、不等于、嚴格相等、非嚴格相等
& 按位與
^ 按位異或
| 按位或
&& 邏輯與
|| 邏輯或
?: 條件
= += -= *= /= %= 賦值運算
, 多重求值
  • 江哥提示:一般情況下不需要死記硬背優先級, 只需要記住()優先級最高即可
  • 結合性

    • JavaScript中各運算符的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。
      • 算術運算符的結合性是自左至右,即先左后右
      例如表達式: x - y + z;
      則y 應先與“-”號結合,執行 x-y 運算,然后再執行+z 的運算。
      這種自左至右的結合 方向就稱為“左結合性”。
      
      • 而自右至左的結合方向稱為“右結合性”。
        最典型的右結合 性運算符是賦值運算符
        例如:如x = y = z = 10;
        由于“=”的 右結合性,應先執行z = 10; 再執行y = z 再執行x = y運算。
      
  • 優先級

    • 先計算優先級高的
        var res = 2 + 3 * 8;
        先算3 * 8, 再加上 2
      
    • 優先級相同則左結合計算
      3*5/3*2
      先算3*5,然后再算除3,最后再乘以2
      

算術運算符

名稱 符號 說明
加法運算符 + 對兩個值進行加法運算,并將結果返回
減法運算符 - 對兩個值進行減法運算,并將結果返回
乘法運算符 * 對兩個值進行乘法運算,并將結果返回
除法運算符 / 對兩個值進行除法運算,并將結果返回
求余運算符 (模運算符) % 對兩個值進行取余運算,并將結果返回
  • 加法運算

    • 格式: Number1 + Number2;
      var res = 1 + 1;
      console.log(res); // 2
      
      var num1 = 10;
      var num2 = 20;
      var res2 = num1 + num2;
      console.log(res2); // 30
      
    • 非Number類型的值進行運算時,會將這些值轉換為Number然后在運算
      var result = true + 1;
      console.log(result); // 2
      result = true + false;
      console.log(result); // 1
      result = 2 + null; 
      console.log(result);// 2
      
    • 任何值和NaN做運算都得NaN
      var result = 2 + NaN;
      console.log(result); //NaN
      
    • 任何的值和字符串做加法運算,都會先轉換為字符串,然后再和字符串做拼串的操作
      var result = 1 + "123";
      console.log(result); // 1123
      result = 2 + "true";
      console.log(result); // 2true
      
  • 減法運算

    • 格式: Number1 - Number2;
      var res = 1 - 1;
      console.log(res); // 0
      
      var num1 = 10;
      var num2 = 20;
      var res2 = num1 - num2;
      console.log(res2); // -10
      
      • 非Number類型的值進行運算時,會將這些值轉換為Number然后在運算
      var result = true - 1;
      console.log(result); // 0
      result = true - false;
      console.log(result); // 1
      result = 2 - null;
      console.log(result);// 2
      
    • 任何值和NaN做運算都得NaN
      var result = 2 - NaN;
      console.log(result); //NaN
      
    • 字符串做減法也會轉換為Number
      var result = 2 - "1";
      console.log(result); // 1
      result = "2" - "1";
      console.log(result); // 1
      
  • 乘法運算

    • 格式: Number1 * Number2;
      var res = 2 * 2;
      console.log(res); // 4
      
      var num1 = 10;
      var num2 = 20;
      var res2 = num1 * num2;
      console.log(res2); // 200
      
      • 其它規律和減法一樣
        • 非Number類型的值進行運算時,會將這些值轉換為Number然后在運算
        • 任何值和NaN做運算都得NaN
        • 字符串做乘法也會轉換為Number
  • 除法運算

    • 格式: Number1 / Number2;
      var res = 2 / 2;
      console.log(res); // 1
      
      var num1 = 10;
      var num2 = 20;
      var res2 = num1 / num2;
      console.log(res2); // 0.5
      
      • 其它規律和減法一樣
        • 非Number類型的值進行運算時,會將這些值轉換為Number然后在運算
        • 任何值和NaN做運算都得NaN
        • 字符串做除法也會轉換為Number
  • 取余運算

    • 格式: Number1 % Number2;
    • m%n 求余,相當于m/n 獲取余數
      var res = 10 % 3;
      console.log(res); // 1
      
      var num1 = 10;
      var num2 = 2.5;
      var res2 = num1 % num2;
      console.log(res2); // 0
      
      • 規律
        • n等于0 返回NaN
        • m等于0 結果為0
        • m>n 正常求余 如:8%3 = 2
        • m<n 結果是m 如:2%4 = 2
        var result = 10 % 0;
        console.log(result); // NaN
        result = 0 % 10;
        console.log(result); // 0
        result = 2 % 10;
        console.log(result); // 2
        
      • 其它規律和減法一樣
        • 非Number類型的值進行運算時,會將這些值轉換為Number然后在運算
        • 任何值和NaN做運算都得NaN
        • 字符串做取余也會轉換為Number
  • Tips
  • 可以通過為一個值 -0 *1 /1來將其轉換為Number
    console.log(result); // 123
    result = true * 1;
    console.log(result); // 1
    result = null / 1;
    console.log(result); // 0

正負運算符

    • 正號
    • + 正號不會對數字產生任何影響
      var num = 123;
      num = +num;
      console.log(num); // 123
      
    • 對于非Number類型的值,會將先轉換為Number,然后再運算
      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, 所以內部不是調用parseInt, 而是Number()函數
      
      var temp = null;
      res = +temp;
      console.log(res); // 0
      
  • 負號
    • - 負號可以對數字進行負號的取反
      var num = 123;
      num = -num;
      console.log(num); // -123
      

學習交流方式:
1.微信公眾賬號搜索: 李南江(配套視頻,代碼,資料各種福利獲取)
2.加入前端學習交流群:
302942894 / 289964053 / 11550038

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 變量 聲明變量 命名變量區分大小寫的語言第一個字符是字母或下劃線_,數字不能作為第一個字符字符必須是字母,數字或者...
    flyingtoparis閱讀 833評論 0 0
  • 1.JavaScript 定義了幾種數據類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區別是什么? ...
    saintkl閱讀 336評論 0 0
  • 文章配套視頻 https://study.163.com/course/introduction/10059730...
    撩課_葉建華閱讀 4,959評論 7 25
  • 關系運算符 為什么要學習關系運算符?默認情況下,我們在程序中寫的每一句正確代碼都會被執行。但很多時候,我們想在某個...
    極客江南閱讀 2,373評論 3 23
  • 函數聲明和函數表達式有什么區別 (*)解析器會率先讀取函數聲明,并使其在執行任何代碼之前可以訪問;函數表達式則必須...
    coolheadedY閱讀 400評論 0 1