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

操作符

一元操作符

只能操作一個(gè)值的操作符叫做一元操作符。

遞增(++)遞減(--)操作符,有兩個(gè)版本:

  • 前置型
    • 執(zhí)行前置遞增和遞減操作時(shí),變量的值都在語(yǔ)句被求值以前改變的(這種情況被稱為副效應(yīng))
var age = 29;       
var anotherAge = --age + 2;
alert(age);         //輸出28
alert(anotherAge);        //輸出30
由于前置遞增和遞減操作與執(zhí)行語(yǔ)句的優(yōu)先級(jí)相等,因此整個(gè)語(yǔ)句會(huì)從左至有被求值,例:
var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2;        //等于21
var num4 = num1 + num2;        //等于21
  • 后置型
    • 后置遞增遞減語(yǔ)法不變,但區(qū)別是:即遞增遞減操作是在包含它們的語(yǔ)句被求值之后才執(zhí)行的,例:
var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2;        //等于22
var num4 = num1 + num2;        //等于21
  • 在應(yīng)用不同的值時(shí),遞增遞減遵循以下規(guī)則:
    • 應(yīng)用一個(gè)包含有效數(shù)字字符的字符串時(shí),先將其轉(zhuǎn)換為數(shù)字值,再執(zhí)行加減一的操作
    • 應(yīng)用一個(gè)不包含有效數(shù)字字符的字符串時(shí),將變量值設(shè)為NaN。
    • 應(yīng)用一個(gè)布爾值false或者true時(shí),先將其轉(zhuǎn)換為0或者1,再執(zhí)行加減一的操作
    • 應(yīng)用于浮點(diǎn)數(shù)時(shí),執(zhí)行加減一操作
    • 應(yīng)用于對(duì)象,先調(diào)用對(duì)象的valueOf()方法取得一個(gè)可操作的值,然后將該值應(yīng)用前述規(guī)則,如果結(jié)果NaN,調(diào)用toString()方法
var s1 = "2";     s1++;    //3
var s2 = "z";     s2++;    //NaN
var b = false;    b++;    //1
var f = 1.1;    f--;    //0.1000000000009(由于浮點(diǎn)舍入錯(cuò)誤導(dǎo)致) 
var o = {
    valueOf: function(){
      return -1;       
    }
};         o--;      //-2

算數(shù)操作符

乘法

乘法操作符是由一個(gè)(*)表示,用于表示兩個(gè)數(shù)值的乘積處理特殊值,遵循以下規(guī)則:

  • 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)乘法計(jì)算,如果乘積超過數(shù)值的表示范圍,用Infinity或-Infinity表示;
  • 如果有一個(gè)操作數(shù)是NaN,結(jié)果是NaN;
  • 如果Infinity與0相乘,結(jié)果NaN;
  • 如果Infinity與Infinity相乘,結(jié)果是Infinity
  • 如果Infinity與非0數(shù)值相乘,結(jié)果是Infinity或者-Infinity;
  • 如果有一個(gè)操作符不是數(shù)值,則調(diào)用Number()將其轉(zhuǎn)換為數(shù)值。

除法

除法操作符有一個(gè)(/)表示,例:var result = 66/11; 處理特殊值,遵循以下規(guī)則:

  • 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)除法計(jì)算,如果商超過數(shù)值的表示范圍,用Infinity或-Infinity表示;
  • 如果有一個(gè)操作數(shù)是NaN,結(jié)果是NaN;
  • 如果0被0除,結(jié)果NaN;
  • 如果Infinity被Infinity除,結(jié)果是NaN
  • 如果非零的有限數(shù)被零除,結(jié)果是Infinity或者-Infinity;
  • 如果Infinity被任何非零數(shù)值除,結(jié)果是Infinity或者-Infinity;
  • 如果有一個(gè)操作符不是數(shù)值,則調(diào)用Number()將其轉(zhuǎn)換為數(shù)值。

求模

求模(余數(shù))操作符有一個(gè)(%)表示,例:var result = 26 % 5; //等于1,處理特殊值,遵循以下規(guī)則:

  • 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)除法計(jì)算,返回除得的余數(shù);
  • 如果被除數(shù)是無窮大值而除數(shù)是有限大的值,結(jié)果NaN;
  • 如果被除數(shù)是有限大的數(shù)值而除數(shù)是零,結(jié)果NaN;
  • 如果Infinity被Infinity除,結(jié)果是NaN;
  • 如果被除數(shù)是有限大的數(shù)值而除數(shù)是無窮大的數(shù)值,則結(jié)果是被除數(shù);
  • 如果被除數(shù)是零,則結(jié)果是零;
  • 如果有一個(gè)操作符不是數(shù)值,則調(diào)用Number()將其轉(zhuǎn)換為數(shù)值。

加性操作符

加法操作符用(+)表示。 例: var result = 1 + 2; 處理特殊值,遵循以下規(guī)則:

  • 如果有一個(gè)操作數(shù)是NaN,則結(jié)果是NaN;
  • 如果是Infinity加Infinity,結(jié)果是Infinity;
  • 如果是-Infinity加-Infinity,結(jié)果是-Infinity;
  • 如果Infinity加-Infinity,結(jié)果是NaN;
  • 如果+0加+0,結(jié)果是+0;
  • 如果-0加-0,結(jié)果是-0;
  • 如果+0加-0,結(jié)果是+0;
  • 不過如果有一個(gè)操作符是字符串,則應(yīng)用以下規(guī)則:
    • 如果兩個(gè)操作數(shù)都是字符串,則拼接起來;
    • 如果只有一個(gè)操作符是字符串,則將另一個(gè)操作符轉(zhuǎn)換為字符串,然后拼接
  • 如果有一個(gè)操作數(shù)是對(duì)象,數(shù)值或布爾,則調(diào)用它們的toString()方法取得相應(yīng)的字符串值,然后再應(yīng)用前面的關(guān)于字符串的規(guī)則,對(duì)于undefined和null,則調(diào)用String()函數(shù)取得字符串.
var result = 5 + 5;
alert(result);      // 10
var result1 = 5 + "5";
alert(result1);         // "55"

減法

減法操作符用(-)表示,var result = 2 - 1;處理特殊值,遵循以下規(guī)則:

  • 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)計(jì)算,返回結(jié)果;
  • 如果有一個(gè)操作數(shù)是NaN,結(jié)果NaN;
  • 如果是 Infinity 減 Infinity,結(jié)果是NaN;
  • 如果是 -Infinity 減 -Infinity,結(jié)果是NaN;
  • 如果是 Infinity 減 -Infinity,結(jié)果是 Infinity;
  • 如果是 -Infinity 減 Infinity,結(jié)果是 -Infinity;
  • 如果+0減+0,結(jié)果是+0;
  • 如果-0減+0,結(jié)果是-0;
  • 如果-0減-0,結(jié)果是+0;
  • 如果有一個(gè)操作符不是數(shù)值,則調(diào)用Number()將其轉(zhuǎn)換為數(shù)值。在計(jì)算
var result1 = 5 - true ;    // 4 ,因?yàn)閠rue轉(zhuǎn)換為1
var result2 = NaN - 1 ;    // NaN
var result3 = 5 - "" ;     // 5, 因?yàn)?"被轉(zhuǎn)換為0
var result4 = 5 - null ;   // 5,因?yàn)閚ull轉(zhuǎn)換為0

關(guān)系操作符

關(guān)系操作符用于對(duì)兩個(gè)值得比較,返回時(shí)布爾值。包括:小于(<)、大于(>)、大于等于(>=)、小于等于(<=)當(dāng)關(guān)系操作數(shù)使用了非數(shù)值,遵循以下規(guī)則:

  • 如果兩個(gè)操作符都是字符串,則比較兩個(gè)字符轉(zhuǎn)對(duì)應(yīng)的字符編碼值;
  • 如果一個(gè)操作數(shù)是數(shù)值,將另一個(gè)操作數(shù)轉(zhuǎn)換為數(shù)值,比較;
  • 如果一個(gè)操作數(shù)是對(duì)象,則調(diào)用valueOf()方法,如果沒有valueOf()方法,調(diào)用toString()方法,在比較;
  • 如果一個(gè)操作數(shù)是布爾,轉(zhuǎn)換為數(shù)值,在比較

相等操作符

ECMAScript提供兩組操作符:相等 和 不相等----先轉(zhuǎn)換再比較,全等 和 不全等----僅比較而不轉(zhuǎn)換

相等和不相等

相等操作符有==兩個(gè)等號(hào)表示,返回布爾值,不相等操作符由!=嘆號(hào)后跟等號(hào)組成,這兩個(gè)操作符先轉(zhuǎn)換再比較(強(qiáng)制轉(zhuǎn)換)轉(zhuǎn)換遵循基本原則:

  • 如果有一個(gè)操作符是布爾值,比較前轉(zhuǎn)換為數(shù)值0或1
  • 如果一個(gè)操作數(shù)是字符串,另一個(gè)是數(shù)值,先將字符串轉(zhuǎn)化為數(shù)值再比較
  • 如果一個(gè)操作符是對(duì)象,另一個(gè)不是,則調(diào)用對(duì)象的valueOf()方法,得到的基本值用前面的規(guī)則比較;
    • 兩個(gè)操作符遵循以下規(guī)則:
      • null 和 undefined 是相等的
      • 比較相等性之前,不能將null 和 undefined轉(zhuǎn)換任何值
      • 如果有個(gè)操作數(shù)是NaN,相等操作符返回false,不相等返回true. NaN不等于NaN
      • 如果兩個(gè)操作數(shù)都是對(duì)象,比較它們是不是同一個(gè)對(duì)象,如果都指向同一個(gè)對(duì)象,則相等操作符返回true;否則,返回false.

全等和不全等

全等操作符由===三個(gè)等于號(hào)表示,只在兩個(gè)操作數(shù)未經(jīng)轉(zhuǎn)換就相等的情況下返回true.

var result1 = ("55" == 55) ;    //true
var result2 = ("55" === 55) ;    //false

不全等操作符由!==一個(gè)感嘆號(hào)后跟兩個(gè)等號(hào)表示,在兩個(gè)操作數(shù)未經(jīng)轉(zhuǎn)換就不相等的情況下返回true

var result1 = ("55" != 55) ;    //false
var result2 = ("55" !== 55) ;    //true

記住:null == undefined會(huì)返回true,因?yàn)樗鼈兪穷愃频闹?null === undefined會(huì)返回false,因?yàn)樗鼈儾煌愋?/strong>


布爾操作符

布爾操作符一共有三個(gè):非(NOT) 與(AND) 或(OR).

邏輯非

邏輯非由一個(gè)感嘆號(hào)!表示,返回布爾值,邏輯非操作先將其轉(zhuǎn)化為布爾值,然后取非對(duì)其求反.

  • 如果操作數(shù)是一個(gè)對(duì)象,返回false;
  • 如果操作符是一個(gè)空字符串,返回true;
  • 如果操作符是一個(gè)非空字符串,返回false;
  • 如果操作符是數(shù)值0 ,返回true;
  • 如果操作數(shù)是任意非0數(shù)值(包括Infinity),返回false;
  • 如果操作數(shù)是null,返回true;
  • 如果操作數(shù)是NaN,返回true;
  • 如果操作數(shù)是undefined,返回true;
alert(!false);    //true
alert(!"blue");    //false
alert(!0);    //true
alert(!NaN);    //true
alert(!"");    //true
同時(shí)使用兩個(gè)邏輯非(!!)操作,實(shí)際上會(huì)模擬Boolean()轉(zhuǎn)型函數(shù)的行為

邏輯與

邏輯與操作符由兩個(gè)和號(hào)&&表示,有兩個(gè)操作數(shù), 例:var result = true && false;

第一個(gè)操作數(shù) 第二個(gè)操作數(shù) 結(jié)果
true true true
true false false
false true false
false false false

邏輯與操作可以應(yīng)用于任何類型的操作數(shù),不僅僅布爾值,其他數(shù)值類型,遵循以下規(guī)則:

  • 如果第一個(gè)操作數(shù)是對(duì)象,返回第二個(gè)操作值;
  • 如果第二個(gè)操作數(shù)是對(duì)象,則只有在第一個(gè)操作數(shù)的求值結(jié)果為true的情況下才會(huì)返回該對(duì)象;
  • 如果兩個(gè)數(shù)都是對(duì)象,返回第二個(gè)操作數(shù);
  • 如果第一個(gè)數(shù)null, 返回null;
  • 如果第一個(gè)操作數(shù)是NaN,則返回NaN;
  • 如果第一個(gè)操作數(shù)是undefined,則返回underfined;

邏輯與操作屬于短路操作,即如果第一個(gè)操作數(shù)能夠決定結(jié)果,不會(huì)對(duì)第二個(gè)操作數(shù)求值.

var found = true ;
var result = ( found && someUndefinedVariable ) ;    //會(huì)發(fā)生錯(cuò)誤,不能使用未定義的值
alert( result ) ;   //這一行不會(huì)執(zhí)行
var found = false ;
var result = ( found && someUndefinedVariable ) ;    //不會(huì)發(fā)生錯(cuò)誤,短路操作
alert( result ) ;   // 會(huì)執(zhí)行"false"

邏輯或

邏輯或操作符由兩個(gè)||兩個(gè)豎線符號(hào)表示,由兩個(gè)操作符,例:var result = true || false;

第一個(gè)操作數(shù) 第二個(gè)操作數(shù) 結(jié)果
true true true
true false true
false true true
false false false

與邏輯與操作相似,也遵循類似規(guī)則:

  • 如果第一個(gè)操作數(shù)是對(duì)象,返回第一個(gè)操作值;
  • 如果第一個(gè)操作數(shù)的求值結(jié)果為false,則返回第二個(gè)操作數(shù);
  • 如果兩個(gè)數(shù)都是對(duì)象,返回第一個(gè)操作數(shù);
  • 如果兩個(gè)操作數(shù)都是null, 返回null;
  • 如果兩個(gè)操作數(shù)都是NaN,則返回NaN;
  • 如果兩個(gè)操作數(shù)都是undefined,則返回underfined;

邏輯或操作也屬于短路操作,即如果第一個(gè)操作數(shù)為true,不會(huì)對(duì)第二個(gè)操作數(shù)求值.

var found = true ;
var result = ( found || someUndefinedVariable ) ;    //不會(huì)發(fā)生錯(cuò)誤
 alert( result ) ;   // 會(huì)執(zhí)行"true"
var found = false ;
var result = ( found && someUndefinedVariable ) ;    // 會(huì)發(fā)生錯(cuò)誤
alert( result ) ;   //  不會(huì)執(zhí)行

條件操作符

語(yǔ)法:variable = boolean_expression ? true_value : false_value;

var max = ( num1 > num2 ) ? num1 :num2 ;
表達(dá)式意思是:如果num1>num2(表達(dá)式返回true),將num1賦值給max;如果false,將num2賦值給max.

賦值操作符

簡(jiǎn)單的賦值操作符由等于號(hào)=表示,作用是把右邊的值賦給左邊的量,例:var num = 10;

  • 如果等號(hào)前面再加其他操作符,可以完成復(fù)合賦值操作,例:
var num = 10;
num = num + 10;    ==>    num += 10;
x += y // 等同于 x = x + y
x -= y // 等同于 x = x - y
x *= y // 等同于 x = x * y
x /= y // 等同于 x = x / y
x %= y // 等同于 x = x % y
x >>= y // 等同于 x = x >> y
x <<= y // 等同于 x = x << y
x >>>= y // 等同于 x = x >>> y
x &= y // 等同于 x = x & y
x |= y // 等同于 x = x | y
x ^= y // 等同于 x = x ^ y

逗號(hào)操作符

逗號(hào)操作符可以在一條語(yǔ)句中執(zhí)行多個(gè)操作,例:var num1 = 1, num2=2, num3=3;

  • 逗號(hào)操作符多用于聲明多個(gè)變量,除此之外,還可以賦值.用于賦值時(shí),逗號(hào)操作符總會(huì)返回表達(dá)式中最后一項(xiàng)
var num = ( 5 , 1 , 4 , 8 , 0) ;    //num值為0
雖然不常見,但是這個(gè)例子可以理解逗號(hào)的這種行為

對(duì)象操作符

  • new
    • 可以獲取一個(gè)對(duì)象示例
  • delete
    • 可以刪除一個(gè)對(duì)象的屬性
  • .
    • 獲取對(duì)象屬性
  • []
    • 獲取對(duì)象屬性的值
  • instanceof
    • 判斷某個(gè)變量是否是某個(gè)對(duì)象的實(shí)例
  • in
    • 判斷某個(gè)屬性是否在對(duì)象中

參考

這些都是一些常見的操作符,好好掌握,嘿嘿,還有 位操作符 還沒太熟練,在研究一下,繼續(xù)努力

最后編輯于
?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 表達(dá)式 表達(dá)式是由數(shù)字、運(yùn)算符、數(shù)字分組符號(hào)(如括號(hào))、自由變量和約束變量等以能求得數(shù)值的有意義排列方法所得的組合...
    劼哥stone閱讀 650評(píng)論 0 4
  • 什么是 JavaScript 語(yǔ)言? JavaScript 是一種輕量級(jí)的腳本語(yǔ)言。所謂“腳本語(yǔ)言”(script...
    oWSQo閱讀 1,923評(píng)論 0 1
  • 本章內(nèi)容 語(yǔ)法 數(shù)據(jù)類型 流控制語(yǔ)句 理解函數(shù) 3.1 語(yǔ)法 3.1.1 區(qū)分大小寫 區(qū)分大小寫 3.1.2 標(biāo)識(shí)...
    悶油瓶小張閱讀 801評(píng)論 0 0
  • 是嫉妒嗎? 我并沒有告訴他, 從事情發(fā)生到現(xiàn)在 一個(gè)人的時(shí)候 真的很亂 還是沒有接受現(xiàn)實(shí): 感情也會(huì)有保質(zhì)期 給信...
    再次起飛的蒲公英閱讀 257評(píng)論 0 0
  • 一、打開輸入法窗口: InputMethodManager inputMethodManager = (Input...
    專屬守護(hù)閱讀 677評(píng)論 0 3

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