JS運算符和表達式

操作符

一元操作符

只能操作一個值的操作符叫做一元操作符。

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

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

算數操作符

乘法

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

  • 如果操作數都是數值,執行常規乘法計算,如果乘積超過數值的表示范圍,用Infinity或-Infinity表示;
  • 如果有一個操作數是NaN,結果是NaN;
  • 如果Infinity與0相乘,結果NaN;
  • 如果Infinity與Infinity相乘,結果是Infinity
  • 如果Infinity與非0數值相乘,結果是Infinity或者-Infinity;
  • 如果有一個操作符不是數值,則調用Number()將其轉換為數值。

除法

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

  • 如果操作數都是數值,執行常規除法計算,如果商超過數值的表示范圍,用Infinity或-Infinity表示;
  • 如果有一個操作數是NaN,結果是NaN;
  • 如果0被0除,結果NaN;
  • 如果Infinity被Infinity除,結果是NaN
  • 如果非零的有限數被零除,結果是Infinity或者-Infinity;
  • 如果Infinity被任何非零數值除,結果是Infinity或者-Infinity;
  • 如果有一個操作符不是數值,則調用Number()將其轉換為數值。

求模

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

  • 如果操作數都是數值,執行常規除法計算,返回除得的余數;
  • 如果被除數是無窮大值而除數是有限大的值,結果NaN;
  • 如果被除數是有限大的數值而除數是零,結果NaN;
  • 如果Infinity被Infinity除,結果是NaN;
  • 如果被除數是有限大的數值而除數是無窮大的數值,則結果是被除數;
  • 如果被除數是零,則結果是零;
  • 如果有一個操作符不是數值,則調用Number()將其轉換為數值。

加性操作符

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

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

減法

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

  • 如果操作數都是數值,執行常規計算,返回結果;
  • 如果有一個操作數是NaN,結果NaN;
  • 如果是 Infinity 減 Infinity,結果是NaN;
  • 如果是 -Infinity 減 -Infinity,結果是NaN;
  • 如果是 Infinity 減 -Infinity,結果是 Infinity;
  • 如果是 -Infinity 減 Infinity,結果是 -Infinity;
  • 如果+0減+0,結果是+0;
  • 如果-0減+0,結果是-0;
  • 如果-0減-0,結果是+0;
  • 如果有一個操作符不是數值,則調用Number()將其轉換為數值。在計算
var result1 = 5 - true ;    // 4 ,因為true轉換為1
var result2 = NaN - 1 ;    // NaN
var result3 = 5 - "" ;     // 5, 因為""被轉換為0
var result4 = 5 - null ;   // 5,因為null轉換為0

關系操作符

關系操作符用于對兩個值得比較,返回時布爾值。包括:小于(<)、大于(>)、大于等于(>=)、小于等于(<=)當關系操作數使用了非數值,遵循以下規則:

  • 如果兩個操作符都是字符串,則比較兩個字符轉對應的字符編碼值;
  • 如果一個操作數是數值,將另一個操作數轉換為數值,比較;
  • 如果一個操作數是對象,則調用valueOf()方法,如果沒有valueOf()方法,調用toString()方法,在比較;
  • 如果一個操作數是布爾,轉換為數值,在比較

相等操作符

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

相等和不相等

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

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

全等和不全等

全等操作符由===三個等于號表示,只在兩個操作數未經轉換就相等的情況下返回true.

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

不全等操作符由!==一個感嘆號后跟兩個等號表示,在兩個操作數未經轉換就不相等的情況下返回true

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

記住:null == undefined會返回true,因為它們是類似的值,null === undefined會返回false,因為它們不同類型


布爾操作符

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

邏輯非

邏輯非由一個感嘆號!表示,返回布爾值,邏輯非操作先將其轉化為布爾值,然后取非對其求反.

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

邏輯與

邏輯與操作符由兩個和號&&表示,有兩個操作數, 例:var result = true && false;

第一個操作數 第二個操作數 結果
true true true
true false false
false true false
false false false

邏輯與操作可以應用于任何類型的操作數,不僅僅布爾值,其他數值類型,遵循以下規則:

  • 如果第一個操作數是對象,返回第二個操作值;
  • 如果第二個操作數是對象,則只有在第一個操作數的求值結果為true的情況下才會返回該對象;
  • 如果兩個數都是對象,返回第二個操作數;
  • 如果第一個數null, 返回null;
  • 如果第一個操作數是NaN,則返回NaN;
  • 如果第一個操作數是undefined,則返回underfined;

邏輯與操作屬于短路操作,即如果第一個操作數能夠決定結果,不會對第二個操作數求值.

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

邏輯或

邏輯或操作符由兩個||兩個豎線符號表示,由兩個操作符,例:var result = true || false;

第一個操作數 第二個操作數 結果
true true true
true false true
false true true
false false false

與邏輯與操作相似,也遵循類似規則:

  • 如果第一個操作數是對象,返回第一個操作值;
  • 如果第一個操作數的求值結果為false,則返回第二個操作數;
  • 如果兩個數都是對象,返回第一個操作數;
  • 如果兩個操作數都是null, 返回null;
  • 如果兩個操作數都是NaN,則返回NaN;
  • 如果兩個操作數都是undefined,則返回underfined;

邏輯或操作也屬于短路操作,即如果第一個操作數為true,不會對第二個操作數求值.

var found = true ;
var result = ( found || someUndefinedVariable ) ;    //不會發生錯誤
 alert( result ) ;   // 會執行"true"
var found = false ;
var result = ( found && someUndefinedVariable ) ;    // 會發生錯誤
alert( result ) ;   //  不會執行

條件操作符

語法:variable = boolean_expression ? true_value : false_value;

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

賦值操作符

簡單的賦值操作符由等于號=表示,作用是把右邊的值賦給左邊的量,例:var num = 10;

  • 如果等號前面再加其他操作符,可以完成復合賦值操作,例:
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

逗號操作符

逗號操作符可以在一條語句中執行多個操作,例:var num1 = 1, num2=2, num3=3;

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

對象操作符

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

參考

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

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

推薦閱讀更多精彩內容

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