js之運算符(算術運算符)


  Javascript中的運算符大多是由標點符號少數由關鍵字表示。可以根據其操作數的個數進行分類.大多數運算符是一個二元運算符,將兩個表達式合成一個比較復雜的表達式。還有需要注意的一點是運算符的優先級,它控制着運算符的執行順序,優先級高的運算符的執行總是優先於運算符低的運算符。進行以下大致的分類:

一、算術運算符

  算術運算符包括一元算術運算符和二元算術運算符兩種。

  1、一元運算符

    一元算術運算符包括一元加法(+)、一元減法(-)、遞增(++)和遞減(--)。只對一個表達式執行操作,並產生一個新值。

  +/-:一元加減運算符

    一元加法運算符把操作數轉換為數字或者是NaN(用函數Number());

    一元減法運算符它會根據需要把操作數轉換為數字,然后改變運算結果的符號。

     所以可以看出一元的加和一元減運算符主要用於基本的算術運算,也可以用於轉換數據類型

<script>
        let a=25; let b='1.1'; let c=false; let d=1.1; let e=NaN; let f=undefined; a=+a; b=+b; c=+c; d=+d; e=+e; f=+f; a1=-a; b1=-b; c1=-c; d1=-d; e1=-e; f1=-f; console.log(a,b,c,d,e,f);//25 1.1 0 1.1 NaN NaN
 console.log(a1,b1,c1,d1,e1,f1);//-25 -1.1 -0 -1.1 NaN NaN
    </script>

   ++/--:遞增和遞減

    運算符對其操作數進行加1或者是減1的操作,操作數是一個左值(value)。運算符將操作數轉換為數字,然后給數字加1或者是減1,並將加1或減1后的數值重新賦值給變量,數組元素或者對象屬性。

    "++"運算符的返回值依賴於它相對於操作數的位置。當運算符在操作數之前稱為”前增量“運算符,當運算符在操作數之后稱為”后增量“。

    如果只操作自己:++放在前面還是后面是一樣的,讓自己加1;

            --放在操作符的前面或者后面是一樣的,讓自己減1;

    如果是操作別人(在賦值給其它的變量):

      ++放在后面,先把自己賦值給另外一個變量,自己再加1;++放在前面,先把自己加1賦值給另外一個變量,然后自己再加一個1;

      --放在后面,先把自己賦值給另外一個變量,自己再減1;--放在前面,先把自己減1然后賦值給另外一個變量,然后自己再減一個1;

    不管是前增還是后增,這個運算符通常用在for循環中,用於控制循環內的計數器

 <script>
        let n = 10; let b = 20; n++; //11
 n--; //10
 b--; //19
        --b; //18
        //console.log(n,b);

        let c1 = 1; //2
        let d1 = c1++; //1
        let c2 = 1; //2
        let d2 = ++c2; //2 
 console.log(c1,d1,c2,d2); let e1=0; //-1
        let f1=--e1; //-1 
        let e2=0; //-1
        let f2=e2--; //0
 console.log(e1,f1,e2,f2); </script>

  2、二元運算符

    二元運算符包括+,-,*,、/,%(求余)

    加法(+):

      在多數的程序設計語言中,加法通常是簡單的數字運算符,但在Javascript中,加法可以進行數字和數字的相加,也可進行字符串的相加。所有其它類型的值都會自動轉換成這兩種類型的值(這其中涉及到隱式類型的轉換,Number()將值轉換為數字,toString()將值轉換成字符串)。

      遵循如下的規則:

        如果其中一個操作數是對象,則對象會轉換成原始值,日期對象通過toString()進行轉換,其它對象能過valueOf()方法進行轉換。由於多數對象valueOf()方法無法返回一個原始值,所以還是通過toString()方法來執行轉換,轉成一個字符串;

        【注意】:除了單數值數組會轉換為數字外

        在進行了對象到原始值的轉換后,如果其中一個操作數是字符串,另一個操作數也會轉換成字符串,進行字符串連接;否則,兩個操作數都將轉換成數字或NaN,進行加法操作。

      知識點回顧:

        在Javascript有兩種類型的值:基本類型:undefined, null, boolean, number,string,symbol,bigInt        引用類型:Array,[],function......

        從上面在原則中我們可以看出加法運算會觸發三種類型的轉換:轉為原始值,轉為數字,轉為字符串。

        轉原始值能過ToPrimitive()方法:如果是一個原始值,則直接返回,如果是一個對象,則用obj.value()方法,如果返回的是原始值,那就是這個原始值,如不是調用obj.toString()方法,如果返回值是一個原始值,那就返回這個原始值,再不是那就是拋出異常。

 <script>
        let a = 1; let b = ''; let c = '1'; let d = [1, 2]; let e = NaN; let f = undefined; let g = false; let h = { valueof: function () { return vuleof; } } let n = [2]; let m = null; //原生對象轉成字符串 
 console.log(a, a + b); //1 "1" 
 console.log(a, a + c);//1 "11"
 console.log(a, a + d);//1 "11,2"
 console.log(a, a + e);//1 NaN
 console.log(a, a + f);//1 NaN
 console.log(a, a + g);//1 1
 console.log(a, a + h);//1 "1[object Object]"
 console.log(a+new Date());// 1Wed Nov 06 2019 10:04:45 GMT+0800 (中國標准時間)

        //特例:單數值組和valueof()返回為數值的自定義對象會轉換為數值
 console.log(a,a+n); //1 "12"
        //如果進行算術加法,undefined轉換成'undefined',null轉換成'null',false轉換成0,true轉換成1
 console.log(f+f); //NaN
 console.log(e+e); //NaN
 console.log(g+g); //0
        
        //如果進行字符串連接,undefined轉換成'undefined',null轉換成'null',false轉換為'false',true轉換為'true'
 console.log(c+d); console.log(c+e); console.log(c+f); console.log(c+g); console.log(c+m); //所以利用加號運算的特性,可以+任意的字符串

    減法(-):

      減法的話只涉及到數字的減法運算,使用Number()轉型函數將非數值類型轉為數值或者是NaN.

  <script>
        // undefined轉換為NaN,null轉換為0,false轉換為0,true轉換為1
 console.log(1-{});//NaN
 console.log(1-[]);//1
 console.log(1-[1,2]);//NaN
 console.log(1-NaN);//NaN
 console.log(1-undefined); //NaN
    </script>

    乖法(*):

      用於計算兩個數值的乖積,會通過Numbe()方法將非數值轉換成數值或者是NaN.

 <script> console.log(1*{});//NaN
 console.log(1*[]);//0
 console.log(1*[1,2]);//NaN
 console.log(1*NaN);//NaN
 console.log(1*undefined); //NaN
    </script>

    除法(/):

    執行第一個操作數除以第二個操作數的運算,通過Number()轉型將非數值類型轉換為數值或NaN

<script> console.log(1/{});//NaN
 console.log(1/[]);//Infinity
 console.log(1/[1,2]);//NaN
 console.log(1/NaN);//NaN
 console.log(1/undefined); //NaN
    </script>  

    求模(%):

      取模的時候如果前面的數字比后面的小,那得到的值就是前面的數字,求模結果與第一個操作數的符號保持一致,前面的數字為infinity,后面的數字為0時,結果為NaN。

<script> console.log(3%5);//3
 console.log(-5%1);//0
 console.log(1%{});//NaN
 console.log(1%[]);//Infinity
 console.log(1%[1,2]);//NaN
 console.log(1%NaN);//NaN
 console.log(1%undefined); //NaN
    </script>

 

      

  

    

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM