2.9.5、加性運算符
加性運算符(即加號和減號)通常是最簡單的運算符,不過在ECMAScript中,每個加性運算符都有大量的特殊行為。
1、加法運算符:
復制代碼 代碼如下:
var iResult=1+2;
console.log(iResult);//outputs 3
特殊性:
某個運算數是NaN,結果為NaN
Infinity加Infinity,結果為Infinity
-Infinity加-Infinity,結果為-Infinity
Infinity加-Infinity,結果為NaN
如果兩個運算數都是字符串,把第二個字符串連接到第一個字符串上
如果只有一個運算數是字符串,把另一個運算數轉換為字符串,結果是兩個字符串連接成的字符串
示例:
復制代碼 代碼如下:
var iResult2=NaN+1;
console.log(iResult2);//NaN
var iResult3=Infinity+Infinity;
console.log(iResult3);//Infinity
var iResult4=-Infinity-Infinity;
console.log(iResult4);//-Infinity
var iResult5="abc"+"bcd";
console.log(iResult5);//abcbcd
var iResult6=5+"5";
console.log(iResult6);//55
2、減法運算符:
復制代碼 代碼如下:
var iResult=2-1;
console.log(iResult);//1
特殊性:
某個運算數是NaN,結果為NaN
Infinity減Infinity,結果為NaN
-Infinity減-Infinity,結果為NaN
Infinity減-Infinity,結果為Infinity
-Infinity減-Infinity,結果為-Infinity
如果兩個運算數都是字符串,結果為NaN
如果只有一個運算數是字符串,把字符串轉換為數字再進行運算
示例:
復制代碼 代碼如下:
var iResult2=NaN-1;
console.log(iResult2);//NaN
var iResult3=Infinity-Infinity;
console.log(iResult3);//NaN
var iResult4=-Infinity-(-Infinity);
console.log(iResult4);//NaN
var iResult5=-Infinity-Infinity;
console.log(iResult5);//-Infinity
var iResult6=Infinity-(-Infinity);
console.log(iResult6);//Infinity
var iResult7="abc"-"a";
console.log(iResult7);//NaN
var iResult8="5"-5;
console.log(iResult8);//0
var iResult9="a"-5;
console.log(iResult9);//NaN
2.9.6、關系運算符
關系運算符<、>、<=、>=執行的是兩個數字的比較運算,返回的是一個Boolean值。如果兩個操作數都是字符串,則逐一比較兩個字符串的ASC碼,如果只有一方是字符串,則把字符串轉換為數字後比較,示例如下:
復制代碼 代碼如下:
var bResult=2<1;
console.log(bResult);//false
var bResult="B"<"a";
console.log(bResult);//true
var bResult="b"<"a";
console.log(bResult);//false
var bResult="13"<"2";
console.log(bResult);//true
var bResult=13<"2";
console.log(bResult);//false
var bResult=-1<"a";
console.log(bResult);//false
第17行的代碼中,"a"被轉換為數字時返回的是NaN,任何包含NaN的關系運算都要返回false。
2.9.7、等性運算符
1、等號和非等號
在ECMAScript中,等號(==)及非等號(!=)都返回Boolean值。為確定兩個運算數是否相等,這兩個運算數都會進行類型轉換,轉換規則如下:
如果一個運算數是Boolean值,在檢查相等性之前,把它轉換成數字值。false轉換成0,true轉換成1。
如果一個運算數是字符串,另一個運算數是數字,在檢查相等性之前,要嘗試把字符串轉換成數字。
如果一個運算數是對象,另一個是字符串,在檢查相等性之前,要嘗試把對象轉換成字符串。
如果一個運算數是對象,另一個是數字,在檢查相等性之前,要嘗試把對象轉換成數字。
在進行比較時,運算符還遵循還列規則:
值null和undefined相等
在檢查相等性時,不能把null和undefined轉換成其他值。
如果某個運算數是NaN,等號將返回false,非等號將返回true。重要提示:即使兩個運算數都是NaN,等號仍返回false,因為根據規則,NaN不等於NaN。
如果兩個運算數都是對象,那麼比較的是它們的引用值。如果兩個運算數把向同一個對象,那麼等號返回true,否則兩個運算數不等。
示例:
復制代碼 代碼如下:
console.log(null==undefined);//true
console.log("NaN"==NaN);//false
console.log(5==NaN);//false
console.log(NaN==NaN);//false
console.log(NaN!=NaN);//true
console.log(false==0);//true
console.log(true==1);//true
console.log(true==2);//false
console.log(undefined==0);//false
console.log(null==0);//false
console.log("5"==5);//true
2、全等號和非全等號
等號和非等號的同類運算符是全等號和非全等號。這兩個運算符所做的與等號和非等號相同,只是它們在檢查相等性前,不執行類型轉換。全等號由三個等號(===)表示,非全等號由感歎號加兩個等號(!==)表示,只有在無需類型轉換運算數就相等的情況下,才返回true。例如:
復制代碼 代碼如下:
console.log("55"==55);//true
console.log("55"===55);//false
console.log("55"!=55);//false
console.log("55"!==55);//true
2.9.8、條件運算符
條件運算符跟其他語言中的相同:varialbe=boolean_expression?true_value:false_value;
示例:
復制代碼 代碼如下:
function Max(iNum1,iNum2){
return iNum1>=iNum2?iNum1:iNum2;
}
console.log(Max(1,3));//3
console.log(Max(3,1));//3
2.9.9、賦值運算符
簡單的賦值運算符由等號(=)實現,只是把等號右邊的值賦予等號左邊的變量,例如:
var iNum=10;
復合賦值運算是由乘性運算符、加性運算符或位移運算符加等號(=)實現的。這些賦值運算符是下列這些常見情況的縮寫形式:
復制代碼 代碼如下:
var iNum=10;
iNum=iNum+10;
//等同於
var iNum=10;
iNum+=10;
每種主要的算術運算及其他幾個運算都有復合賦值運算符:
乘法/賦值(*=)
除法/賦值(/=)
取模/賦值(%=)
加法/賦值(+=)
減法/賦值(-=)
左移/賦值(<<=)
有符號右移/賦值(>>=)
無符號右移/賦值(>>>=)
2.9.10、逗號運算符
用逗號運算符可以在一條語句中執行多個運算。例如:
var iNum=1,iNum2=2,iNum3=3;
逗號運算符最常用於變量聲明中。