表達式和運算符詳解

表達式

表達式是ECMAscript中的一個‘短語’,解釋器會經過計算把它轉化成一個值,最簡單的表達式是字面量或者變量名。java

例如:5 //數字字面量數組

「xiongbao」//字符串字面量app

{x1,y2}對象字面量,對象表達式ide

[1,2,3]數組字面量,數組表達式函數

funciton(N)(return x+y) 函數字面量,函數表達式編碼

合併簡單表示建立複雜表示是spa

box+5  //加法運算符表達式orm

typeof(box)查看數據類型的表達式對象

box>8  邏輯運算表達式ip

1 一元運算符

(1)遞增++和遞減 - -

   var  box = 100;

         ++box             //box = box + 1 ;

          box++               //box= box +1 ;

(2) 前置和後置的區別

      前置 運算先累加或者累減再賦值;

      後置  先賦值再累加或者累減

          var box = 100;

          var age = box++              //box = 100+1  賦值給age

          var  age = ++box             // age = box;而後box+1;

 (3)其餘類型運用一元運算符

     字符串類型

   A:  var box = 「89」;

              box++                  // 對於數字字符串  有隱形的轉換功能,自動轉化成數字類型

  B:var box = 「ab」;

             box++                  // 字符串包含非數字值轉換爲NaN

     布爾類型

       var box =false;

              box++                  //false轉換成數值是0,累加1 結果爲1;

      對象類型

        var box = {

                     toString:function(){ return}

             };

         box++                  //結果爲1  不執行toString()或者value() 方法爲NaN

(4)一元加減運算符

1.用於類型轉換

2.用於算術運算

3.加法用於取整,減法用於取負。

var box = 1;

-box ;

+box;

2.算術運算符

ECMAscript定義了五個算術運算符,加(+)減(-)乘(*)除(/)求模(取餘)。

若是在算術運算的值很多數值,那麼後臺會自動調用number()函數將其轉化成數值。

(1) 加法

a若是都是數值

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  正無窮和負無窮爲非負數

var box = +0 加 +0 ;              //  結果爲+0

var box = -0 加 -0 ;              //  結果爲-0

var box = +0 加 -0 ;              //  結果爲+0

b若是一個操做數是字符串

b1: 若是兩個數都是字符串,則講兩個字符串拼接起來

var  box = a + b ;              // 結果是ab

b2:若是隻有一個是字符串,則將不是的字符串變成字符串,再拼接起來

var box = 7 + 「9」;           // 結果是79

c 若是操做數 是對象和布爾值

調用他們的toString()得到相應的字符串值,再利用相關的字符串值

D 若是是undefined 和 null

則調用string()函數並取得字符串「undefined」和「null」。

(2) 減法

a若是都是數值

var  box = 1+2;                        //結果爲3  若是兩個操做符都是數值,則執行常規的算術減法操做並返回結果。

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 = +0 減+0 ;              //  結果爲+0

var box = +0 減 -0 ;              //  結果爲-0

var box = -0 加 -0 ;              //  結果爲+0

b若是一個操做數是字符串,布爾值,Null或者undefined

先在後臺調用number()函數將其轉化爲數值,而後再根據前面規則執行減法計算。若是轉換的結果是NaN,則減法的結果就是NaN。

c 若是一個操做數是對象

則調用對象的valueOf()方法以取得該對象的數值。

若是獲得的結果是NaN,則減法的結果就是NaN。

若是對象沒有valueOf()方法,則調用toString()方法並將獲得的字符串轉化爲數值。

(3) 乘法 符合(*)

var  box = 10*70;                        //結果爲700

var  box = 1*NaN                      //結果爲NaN   若是一個操做符是NaN 就爲NaN

var box = Infinity * Infinity          //結果爲 Infinify

var box = -Infinity*- Infinity    //結果爲Infinify

var box = Infinity * -Infinity      // 結果爲-Infinity

var box = 10*true;              //  結果爲100,true轉成數值爲1

var box = 10* 「 」;              //  結果爲0  「 」轉成了0

var box = 10*null;              //  結果爲0  null轉成了0

var box = 10*「lee」;          //  結果爲NaN  lee轉成了NaN

var box = 10* 對象;          //  結果爲NaN  

小結

a若是操做數都是數值,執行常規的乘法計算,倆個正數或者兩個負數相乘結果爲正數,若是有一個操做符有符合,結果爲負數。若是超過ECMAScript的數值範圍,則返回Infinity或者-Infinity。

b若是一個操做符是NaN結果就是NaN

c 若是是Infinity與0相乘,則結果是NaN;

d 若是是Infinity與非0相乘,則結果是Infinity或者-Infinity,取決於符號操做數的符合。

e 若是Infinity * Infinity,結果是Infinity。

f 若是一個操做數不是數值,則在後臺調用Number() 將其轉換爲數值,在應用上面的規則

(4) 除法(/)

var  box = 10/7;                        //結果爲1.42

var  box = 1/NaN                      //結果爲NaN   若是一個操做符是NaN 就爲NaN

var box = Infinity / Infinity          //結果爲 NaN

var box = -Infinity/- Infinity    //結果爲NaN

var box = Infinity /-Infinity      // 結果爲NaN

var box = 10/true;              //  結果爲100,true轉成數值爲1

var box = 10/ 「 」;              //  結果爲Infinity

var box = 10/null;              //  結果爲Infinity

var box = 10/「lee」;          //  結果爲NaN  lee轉成了NaN

var box = 10/ 對象;          //  結果爲NaN

小結

a若是操做數都是數值,執行常規的除法計算,倆個正數或者兩個負數相除結果爲正數,若是有一個操做符有符合,結果爲負數。若是超過ECMAScript的數值範圍,則返回Infinity或者-Infinity。

b若是一個操做符是NaN結果就是NaN

c 若是是Infinity被Infinity除,則結果是NaN

d 若是是零被零除,則結果是NaN

e若是是非零的有限數被零除,則結果是Infinity或者-Infinity,取決於符號操做數的符合

f若是是Infinity被任何非零數值除,則結果是Infinity或者-Infinity,取決於符號操做數的符合

f 若是Infinity * Infinity,結果是Infinity

d 若是一個操做數不是數值,則在後臺調用Number() 將其轉換爲數值,在應用上面的規則

(5) 求模(取餘%)

var  box = 10%3;                        //結果爲1

var  box = 1%NaN                      //結果爲NaN 

var box = Infinity %Infinity          //結果爲 NaN

var box = -Infinity%- Infinity    //結果爲NaN

var box = Infinity%-Infinity      // 結果爲NaN

var box = 10%true;              //  結果爲0

var box = 10%「 」;              //  結果爲Nan

var box = 10%null;              //  結果爲NaN

var box = 10%「lee」;          //  結果爲NaN

var box = 10%對象;          //  結果爲NaN

小結

a若是操做數都是數值,執行常規的除法計算,返回除得的餘數

b若是被除數是無窮大值而除數是有限值,結果就是NaN

c 若是被除數是有限大的數值而除數是0,則結果是NaN

d 若是Infinity被Infinity除,則結果是NaN

e若是被除數是有限大的數值而除數是無窮大的數值,則結果是被除數

f若是被除數是零,則結果是零

d 若是一個操做數不是數值,則在後臺調用Number() 將其轉換爲數值,在應用上面的規則

3.關係運算符


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

var  box = 3 < 2 ;                 // 關係運算符大多返回一個布爾值

var  box = 「3」 >22;              // 字符串會被轉化成數值,再比較

var  box = 「3」 >「22」;            // 若是兩個都是字符串,會對第一個字符進行比較,3>2

var box  = 對象  ;                 //false;

var box = 2 > {

    toString:funtion(){

           return 1;

     }

}

var   box  = "a">"b";              //97 >98  字符編碼進行比較

var  box  = "a">"B";              //97 >66  字符編碼進行比較

總結:

1.倆個操做數都是數值,則數值比較

2.兩個操做數都是字符串,則比較兩個字符串對應的字符編碼值

3.若是一個操做數是數值,則將另一個操做數轉化爲數值,而後進行數值比較

4.若是一個操做數是布爾值,則先將其轉化成數值,而後再執行比較

5若是一個操做數是對象,則先調用valueof()方法或toString()方法,再用結果比較

相等和不相等------先轉換再比較;全等和不全等------僅比較而不轉換

var box = 2 == 1;                     //true 

var box = 「2」 == 2;                  //true       「2」會轉成數值2

var box = false==0;                //true        false轉成數值就是0;

var  box =「a」 == 「A」;              //false       轉換後的編碼不同

var  box = 2 =={}        ;              // false 執行toString()或 ValueOf()會改變

var box = 2 ==NaN;               //false , 只要有NaN,都是false

var box = { } == {}                     // false 比較的是他們的地址,每一個新建對象的引用地址都不一樣

var age = { };

var  height = age;

var box = age ==height;      // true,應用地址同樣,因此相等

var box = 「2」===2;              // false   值和類型都必須相等

var  box = 2!==2;             // false  值和類型都相等了

總結

1.若是一個操做數是布爾值,則先將其轉換成數值,true是1,false是0

2.若是一個操做數是字符串,則將其轉成數值再比較

3.若是一個操做數的對象,則先調用valueOf()或toString()方法再返回值比較

4.不轉換的狀況下,null等於undefined

5.若是有一個操做符是NaN,則相等操做符返回false,不相等操做符返回true;NaN不等於NaN

6.若是兩個操做數都是對象,則比較透明是不是同一個對象,若是都指向同一個對象,怎返回true,不然返回false

7.在全等和不全等的比較中,值和類型都相等,才返回true,不然返回false。換句話,在操做數不轉換的狀況下相等纔是全等。

3.布爾運算符

邏輯操做符:非(not)、與(and)、或(or)。

邏輯非

邏輯非由一個歎號(!)表示,應用於任何類型。這個操做符有轉換功能,把操做數轉換成布爾值,而後再對其求反。返回結果只有真true和假false。

例子

alert(!false)  ;          //true

alert(!「blue」);         //false

alert(!0);                //true

alert(!NaN);         //true

alert(!「」);              //true

alert(!12345);     //false

總結:

1.若是操做數是一個對象,返回false

2.若是操做數是一個非空字符串,返回false

3.若是操做數是任何非0數值(包括Infinity),返回false

4.若是操做數是一個空字符串,返回true

5.若是操做數是數值0,返回true

6.若是操做數是數值null,返回true

7.若是操做數是數值NaN,返回true

8.若是操做數是數值undefined,返回true

邏輯與

邏輯與操做符(&&)表示。邏輯與操做符,屬於短路操做,若是第一個操做可以決定結果,那麼就不會再對第二個操做數求值。若是第一個操做數是false,那麼第二個值不管是什麼,結果都是false。

var result = true && false

x == 0 && y == 0      //只有x和y都爲0,纔會返回true.

邏輯與操做適應任何類型的操做數,不只是布爾操做。

規則以下

1.若是第一個操做數是對象,責返回第二個操做數

3.若是第二個操做數是對象,則只有在第一個數的數值結果爲true的狀況下才會返回該對象

4.若是倆個操做數都是對象,則返回第二個操做數

5.若是第一個操做數是null,則返回null

6.若是第一個操做數是NaN,則返回NaN

7.若是第一個操做數是undefined,則返回undefined

注意:不能在邏輯與操做中實用未定義的值,會報錯

邏輯或

邏輯或操做符由(||)表示。邏輯或操做符也是短路操做符,若是第一個操做數的求值結果爲true,就不會對第二個操做數求值了,倆個操做數都爲false,纔會返回false.

若是有一個操做數不是布爾值,邏輯或不必定返回布爾值。

規則以下:

1.若是第一個數是對象,則返回第一個操做數

2.若是第一個操做數的求值結果爲false,則返回第二個操做數

3.若是兩個操做數都是對象,則返回第一個操做數

4.若是倆個操做數都是null,則返回null

5.若是倆個操做數都是NaN,則返回NaN

6.若是倆個操做數都是undefined,則返回undefined

條件運算符

javaScript惟一一個三元運算符,寫成「?:」。

例如:x > 0 ? x : -x              //求x的絕對值

解釋:若是x大於0,返回x;若是x小於0,則返回-x。

var max = (num1 > num2) ? num1:num2

賦值操做符

簡單的複製操做符(=)

複合賦值操做符

num += 10和 num = num+10同樣

乘賦值(*=)

除賦值(/=)

加賦值(+=)

減賦值(-=)

相關文章
相關標籤/搜索