操作符
一元操作符
只能操作一個值的操作符叫做一元操作符。
有遞增(++)
和遞減(--)
操作符,有兩個版本:
- 前置型
- 執行前置遞增和遞減操作時,變量的值都在語句被求值以前改變的(這種情況被稱為副效應)
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
- 判斷某個屬性是否在對象中
參考
- 相等操作符“==”詳細的類型轉換,可以參考下JavaScript中的相等性判斷
- 關于操作符的優先級,可以參考下運算符優先級
這些都是一些常見的操作符,好好掌握,嘿嘿,還有 位操作符 還沒太熟練,在研究一下,繼續努力