溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

表達(dá)式和運(yùn)算符詳解

發(fā)布時(shí)間:2020-07-12 00:33:33 來源:網(wǎng)絡(luò) 閱讀:495 作者:熊孩子CEO 欄目:開發(fā)技術(shù)

表達(dá)式

表達(dá)式是ECMAscript中的一個(gè)‘短語’,解釋器會(huì)通過計(jì)算把它轉(zhuǎn)化成一個(gè)值,最簡(jiǎn)單的表達(dá)式是字面量或者變量名。

例如:5 //數(shù)字字面量

“xiongbao”//字符串字面量

{x1,y2}對(duì)象字面量,對(duì)象表達(dá)式

[1,2,3]數(shù)組字面量,數(shù)組表達(dá)式

funciton(N)(return x+y) 函數(shù)字面量,函數(shù)表達(dá)式

合并簡(jiǎn)單表示創(chuàng)建復(fù)雜表示是

box+5  //加法運(yùn)算符表達(dá)式

typeof(box)查看數(shù)據(jù)類型的表達(dá)式

box>8  邏輯運(yùn)算表達(dá)式

1 一元運(yùn)算符

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

   var  box = 100;

         ++box             //box = box + 1 ;

          box++               //box= box +1 ;

(2) 前置和后置的區(qū)別

      前置 運(yùn)算先累加或者累減再賦值;

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

          var box = 100;

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

          var  age = ++box             // age = box;然后box+1;

 (3)其他類型運(yùn)用一元運(yùn)算符

     字符串類型

   A:  var box = “89”;

              box++                  // 對(duì)于數(shù)字字符串  有隱形的轉(zhuǎn)換功能,自動(dòng)轉(zhuǎn)化成數(shù)字類型

  B:var box = “ab”;

             box++                  // 字符串包含非數(shù)字值轉(zhuǎn)換為NaN

     布爾類型

       var box =false;

              box++                  //false轉(zhuǎn)換成數(shù)值是0,累加1 結(jié)果為1;

      對(duì)象類型

        var box = {

                     toString:function(){ return}

             };

         box++                  //結(jié)果為1  不執(zhí)行toString()或者value() 方法為NaN

(4)一元加減運(yùn)算符

1.用于類型轉(zhuǎn)換

2.用于算術(shù)運(yùn)算

3.加法用于取整,減法用于取負(fù)。

var box = 1;

-box ;

+box;

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

ECMAscript定義了五個(gè)算術(shù)運(yùn)算符,加(+)減(-)乘(*)除(/)求模(取余)。

如果在算術(shù)運(yùn)算的值不少數(shù)值,那么后臺(tái)會(huì)自動(dòng)調(diào)用number()函數(shù)將其轉(zhuǎn)化成數(shù)值。

(1) 加法

a如果都是數(shù)值

var  box = 1+2;                        //結(jié)果為3   

var  box = 1+NaN                      //結(jié)果為NaN   只要一個(gè)數(shù)值是NaN 就為NaN

var box = Infinity 加 Infinity          //結(jié)果為 Infinity

var box = -Infinity 加 - Infinity    //結(jié)果為 -Infinity

var box = Infinity 加 -Infinity      // 結(jié)果為 NaN  正無窮和負(fù)無窮為非負(fù)數(shù)

var box = +0 加 +0 ;              //  結(jié)果為+0

var box = -0 加 -0 ;              //  結(jié)果為-0

var box = +0 加 -0 ;              //  結(jié)果為+0

b如果一個(gè)操作數(shù)是字符串

b1: 如果兩個(gè)數(shù)都是字符串,則講兩個(gè)字符串拼接起來

var  box = a + b ;              // 結(jié)果是ab

b2:如果只有一個(gè)是字符串,則將不是的字符串變成字符串,再拼接起來

var box = 7 + “9”;           // 結(jié)果是79

c 如果操作數(shù) 是對(duì)象和布爾值

調(diào)用他們的toString()獲得相應(yīng)的字符串值,再利用相關(guān)的字符串值

D 如果是undefined 和 null

則調(diào)用string()函數(shù)并取得字符串“undefined”和“null”。

(2) 減法

a如果都是數(shù)值

var  box = 1+2;                        //結(jié)果為3  如果兩個(gè)操作符都是數(shù)值,則執(zhí)行常規(guī)的算術(shù)減法操作并返回結(jié)果。

var  box = 1-NaN                      //結(jié)果為NaN  如果一個(gè)操作符是NaN 就為NaN

var box = Infinity 減 Infinity          //結(jié)果為 NaN

var box = -Infinity減 - Infinity    //結(jié)果為NaN

var box = Infinity 減 -Infinity      // 結(jié)果為Infinity

var box =- Infinity 減 Infinity      // 結(jié)果為-Infinity

var box = +0 減+0 ;              //  結(jié)果為+0

var box = +0 減 -0 ;              //  結(jié)果為-0

var box = -0 加 -0 ;              //  結(jié)果為+0

b如果一個(gè)操作數(shù)是字符串,布爾值,Null或者undefined

先在后臺(tái)調(diào)用number()函數(shù)將其轉(zhuǎn)化為數(shù)值,然后再根據(jù)前面規(guī)則執(zhí)行減法計(jì)算。如果轉(zhuǎn)換的結(jié)果是NaN,則減法的結(jié)果就是NaN。

c 如果一個(gè)操作數(shù)是對(duì)象

則調(diào)用對(duì)象的valueOf()方法以取得該對(duì)象的數(shù)值。

如果得到的結(jié)果是NaN,則減法的結(jié)果就是NaN。

如果對(duì)象沒有valueOf()方法,則調(diào)用toString()方法并將得到的字符串轉(zhuǎn)化為數(shù)值。

(3) 乘法 符合(*)

var  box = 10*70;                        //結(jié)果為700

var  box = 1*NaN                      //結(jié)果為NaN   如果一個(gè)操作符是NaN 就為NaN

var box = Infinity * Infinity          //結(jié)果為 Infinify

var box = -Infinity*- Infinity    //結(jié)果為Infinify

var box = Infinity * -Infinity      // 結(jié)果為-Infinity

var box = 10*true;              //  結(jié)果為100,true轉(zhuǎn)成數(shù)值為1

var box = 10* “ ”;              //  結(jié)果為0  “ ”轉(zhuǎn)成了0

var box = 10*null;              //  結(jié)果為0  null轉(zhuǎn)成了0

var box = 10*“l(fā)ee”;          //  結(jié)果為NaN  lee轉(zhuǎn)成了NaN

var box = 10* 對(duì)象;          //  結(jié)果為NaN  

小結(jié)

a如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)的乘法計(jì)算,倆個(gè)正數(shù)或者兩個(gè)負(fù)數(shù)相乘結(jié)果為正數(shù),如果有一個(gè)操作符有符合,結(jié)果為負(fù)數(shù)。如果超過ECMAScript的數(shù)值范圍,則返回Infinity或者-Infinity。

b如果一個(gè)操作符是NaN結(jié)果就是NaN

c 如果是Infinity與0相乘,則結(jié)果是NaN;

d 如果是Infinity與非0相乘,則結(jié)果是Infinity或者-Infinity,取決于符號(hào)操作數(shù)的符合。

e 如果Infinity * Infinity,結(jié)果是Infinity。

f 如果一個(gè)操作數(shù)不是數(shù)值,則在后臺(tái)調(diào)用Number() 將其轉(zhuǎn)換為數(shù)值,在應(yīng)用上面的規(guī)則

(4) 除法(/)

var  box = 10/7;                        //結(jié)果為1.42

var  box = 1/NaN                      //結(jié)果為NaN   如果一個(gè)操作符是NaN 就為NaN

var box = Infinity / Infinity          //結(jié)果為 NaN

var box = -Infinity/- Infinity    //結(jié)果為NaN

var box = Infinity /-Infinity      // 結(jié)果為NaN

var box = 10/true;              //  結(jié)果為100,true轉(zhuǎn)成數(shù)值為1

var box = 10/ “ ”;              //  結(jié)果為Infinity

var box = 10/null;              //  結(jié)果為Infinity

var box = 10/“l(fā)ee”;          //  結(jié)果為NaN  lee轉(zhuǎn)成了NaN

var box = 10/ 對(duì)象;          //  結(jié)果為NaN

小結(jié)

a如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)的除法計(jì)算,倆個(gè)正數(shù)或者兩個(gè)負(fù)數(shù)相除結(jié)果為正數(shù),如果有一個(gè)操作符有符合,結(jié)果為負(fù)數(shù)。如果超過ECMAScript的數(shù)值范圍,則返回Infinity或者-Infinity。

b如果一個(gè)操作符是NaN結(jié)果就是NaN

c 如果是Infinity被Infinity除,則結(jié)果是NaN

d 如果是零被零除,則結(jié)果是NaN

e如果是非零的有限數(shù)被零除,則結(jié)果是Infinity或者-Infinity,取決于符號(hào)操作數(shù)的符合

f如果是Infinity被任何非零數(shù)值除,則結(jié)果是Infinity或者-Infinity,取決于符號(hào)操作數(shù)的符合

f 如果Infinity * Infinity,結(jié)果是Infinity

d 如果一個(gè)操作數(shù)不是數(shù)值,則在后臺(tái)調(diào)用Number() 將其轉(zhuǎn)換為數(shù)值,在應(yīng)用上面的規(guī)則

(5) 求模(取余%)

var  box = 10%3;                        //結(jié)果為1

var  box = 1%NaN                      //結(jié)果為NaN 

var box = Infinity %Infinity          //結(jié)果為 NaN

var box = -Infinity%- Infinity    //結(jié)果為NaN

var box = Infinity%-Infinity      // 結(jié)果為NaN

var box = 10%true;              //  結(jié)果為0

var box = 10%“ ”;              //  結(jié)果為Nan

var box = 10%null;              //  結(jié)果為NaN

var box = 10%“l(fā)ee”;          //  結(jié)果為NaN

var box = 10%對(duì)象;          //  結(jié)果為NaN

小結(jié)

a如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)的除法計(jì)算,返回除得的余數(shù)

b如果被除數(shù)是無窮大值而除數(shù)是有限值,結(jié)果就是NaN

c 如果被除數(shù)是有限大的數(shù)值而除數(shù)是0,則結(jié)果是NaN

d 如果Infinity被Infinity除,則結(jié)果是NaN

e如果被除數(shù)是有限大的數(shù)值而除數(shù)是無窮大的數(shù)值,則結(jié)果是被除數(shù)

f如果被除數(shù)是零,則結(jié)果是零

d 如果一個(gè)操作數(shù)不是數(shù)值,則在后臺(tái)調(diào)用Number() 將其轉(zhuǎn)換為數(shù)值,在應(yīng)用上面的規(guī)則

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


用于進(jìn)行比較的運(yùn)算符稱為關(guān)系運(yùn)算符:小于(<),大于(<),小于等于(<=),大于等于(>=),相等(==),不等(!=),全等【恒等】(===),不全等【不恒等】(!==)。

var  box = 3 < 2 ;                 // 關(guān)系運(yùn)算符大多返回一個(gè)布爾值

var  box = “3” >22;              // 字符串會(huì)被轉(zhuǎn)化成數(shù)值,再比較

var  box = “3” >“22”;            // 如果兩個(gè)都是字符串,會(huì)對(duì)第一個(gè)字符進(jìn)行比較,3>2

var box  = 對(duì)象  ;                 //false;

var box = 2 > {

    toString:funtion(){

           return 1;

     }

}

var   box  = "a">"b";              //97 >98  字符編碼進(jìn)行比較

var  box  = "a">"B";              //97 >66  字符編碼進(jìn)行比較

總結(jié):

1.倆個(gè)操作數(shù)都是數(shù)值,則數(shù)值比較

2.兩個(gè)操作數(shù)都是字符串,則比較兩個(gè)字符串對(duì)應(yīng)的字符編碼值

3.如果一個(gè)操作數(shù)是數(shù)值,則將另外一個(gè)操作數(shù)轉(zhuǎn)化為數(shù)值,然后進(jìn)行數(shù)值比較

4.如果一個(gè)操作數(shù)是布爾值,則先將其轉(zhuǎn)化成數(shù)值,然后再執(zhí)行比較

5如果一個(gè)操作數(shù)是對(duì)象,則先調(diào)用valueof()方法或toString()方法,再用結(jié)果比較

相等和不相等------先轉(zhuǎn)換再比較;全等和不全等------僅比較而不轉(zhuǎn)換

var box = 2 == 1;                     //true 

var box = “2” == 2;                  //true       “2”會(huì)轉(zhuǎn)成數(shù)值2

var box = false==0;                //true        false轉(zhuǎn)成數(shù)值就是0;

var  box =“a” == “A”;              //false       轉(zhuǎn)換后的編碼不一樣

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

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

var box = { } == {}                     // false 比較的是他們的地址,每個(gè)新建對(duì)象的引用地址都不同

var age = { };

var  height = age;

var box = age ==height;      // true,應(yīng)用地址一樣,所以相等

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

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

總結(jié)

1.如果一個(gè)操作數(shù)是布爾值,則先將其轉(zhuǎn)換成數(shù)值,true是1,false是0

2.如果一個(gè)操作數(shù)是字符串,則將其轉(zhuǎn)成數(shù)值再比較

3.如果一個(gè)操作數(shù)的對(duì)象,則先調(diào)用valueOf()或toString()方法再返回值比較

4.不轉(zhuǎn)換的情況下,null等于undefined

5.如果有一個(gè)操作符是NaN,則相等操作符返回false,不相等操作符返回true;NaN不等于NaN

6.如果兩個(gè)操作數(shù)都是對(duì)象,則比較透明是否是同一個(gè)對(duì)象,如果都指向同一個(gè)對(duì)象,怎返回true,否則返回false

7.在全等和不全等的比較中,值和類型都相等,才返回true,否則返回false。換句話,在操作數(shù)不轉(zhuǎn)換的情況下相等才是全等。

3.布爾運(yùn)算符

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

邏輯非

邏輯非由一個(gè)嘆號(hào)(?。┍硎?,應(yīng)用于任何類型。這個(gè)操作符有轉(zhuǎn)換功能,把操作數(shù)轉(zhuǎn)換成布爾值,然后再對(duì)其求反。返回結(jié)果只有真true和假false。

例子

alert(!false)  ;          //true

alert(!“blue”);         //false

alert(!0);                //true

alert(!NaN);         //true

alert(!“”);              //true

alert(!12345);     //false

總結(jié):

1.如果操作數(shù)是一個(gè)對(duì)象,返回false

2.如果操作數(shù)是一個(gè)非空字符串,返回false

3.如果操作數(shù)是任何非0數(shù)值(包括Infinity),返回false

4.如果操作數(shù)是一個(gè)空字符串,返回true

5.如果操作數(shù)是數(shù)值0,返回true

6.如果操作數(shù)是數(shù)值null,返回true

7.如果操作數(shù)是數(shù)值NaN,返回true

8.如果操作數(shù)是數(shù)值undefined,返回true

邏輯與

邏輯與操作符(&&)表示。邏輯與操作符,屬于短路操作,如果第一個(gè)操作能夠決定結(jié)果,那么就不會(huì)再對(duì)第二個(gè)操作數(shù)求值。如果第一個(gè)操作數(shù)是false,那么第二個(gè)值無論是什么,結(jié)果都是false。

var result = true && false

x == 0 && y == 0      //只有x和y都為0,才會(huì)返回true.

邏輯與操作適應(yīng)任何類型的操作數(shù),不僅是布爾操作。

規(guī)則如下

1.如果第一個(gè)操作數(shù)是對(duì)象,責(zé)返回第二個(gè)操作數(shù)

3.如果第二個(gè)操作數(shù)是對(duì)象,則只有在第一個(gè)數(shù)的數(shù)值結(jié)果為true的情況下才會(huì)返回該對(duì)象

4.如果倆個(gè)操作數(shù)都是對(duì)象,則返回第二個(gè)操作數(shù)

5.如果第一個(gè)操作數(shù)是null,則返回null

6.如果第一個(gè)操作數(shù)是NaN,則返回NaN

7.如果第一個(gè)操作數(shù)是undefined,則返回undefined

注意:不能在邏輯與操作中實(shí)用未定義的值,會(huì)報(bào)錯(cuò)

邏輯或

邏輯或操作符由(||)表示。邏輯或操作符也是短路操作符,如果第一個(gè)操作數(shù)的求值結(jié)果為true,就不會(huì)對(duì)第二個(gè)操作數(shù)求值了,倆個(gè)操作數(shù)都為false,才會(huì)返回false.

如果有一個(gè)操作數(shù)不是布爾值,邏輯或不一定返回布爾值。

規(guī)則如下:

1.如果第一個(gè)數(shù)是對(duì)象,則返回第一個(gè)操作數(shù)

2.如果第一個(gè)操作數(shù)的求值結(jié)果為false,則返回第二個(gè)操作數(shù)

3.如果兩個(gè)操作數(shù)都是對(duì)象,則返回第一個(gè)操作數(shù)

4.如果倆個(gè)操作數(shù)都是null,則返回null

5.如果倆個(gè)操作數(shù)都是NaN,則返回NaN

6.如果倆個(gè)操作數(shù)都是undefined,則返回undefined

條件運(yùn)算符

javaScript唯一一個(gè)三元運(yùn)算符,寫成“?:”。

例如:x > 0 ? x : -x              //求x的絕對(duì)值

解釋:如果x大于0,返回x;如果x小于0,則返回-x。

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

賦值操作符

簡(jiǎn)單的復(fù)制操作符(=)

復(fù)合賦值操作符

num += 10和 num = num+10一樣

乘賦值(*=)

除賦值(/=)

加賦值(+=)

減賦值(-=)


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI