關(guān)系運(yùn)算符
關(guān)系運(yùn)算符小于、大于醋寝、小于等于和大于等于執(zhí)行的是兩個(gè)數(shù)的比較運(yùn)算脾歧,比較方式與算術(shù)比較運(yùn)算相同。
每個(gè)關(guān)系運(yùn)算符都返回一個(gè)布爾值:
常規(guī)比較方式
比較兩個(gè)字符串形式的數(shù)字時(shí)含蓉,比如:
var bResult = "25" < "3";
alert(bResult); // 輸出 "true"
上面這段代碼比較的是字符串 "25" 和 "3"。兩個(gè)運(yùn)算數(shù)都是字符串项郊,所以比較的是它們的字符代碼("2" 的字符代碼是 50馅扣,"3" 的字符代碼是 51)。
不過(guò)着降,如果把某個(gè)運(yùn)算數(shù)該為數(shù)字差油,那么結(jié)果就有趣了:
var bResult = "25" < 3; // 字符串"25"通過(guò)parseInt()轉(zhuǎn)換為數(shù)字
alert(bResult); // 輸出 "false"
無(wú)論何時(shí)比較一個(gè)數(shù)字和一個(gè)字符串,ECMAScript 都會(huì)把字符串轉(zhuǎn)換成數(shù)字任洞,然后按照數(shù)字順序比較它們蓄喇。
不過(guò),如果字符串不能轉(zhuǎn)換成數(shù)字又該如何呢交掏?考慮下面的例子:
var bResult = "a" < 3; // 字符串"a"通過(guò)parseInt()轉(zhuǎn)換為NaN
alert(bResult);
字母"a"不能轉(zhuǎn)換成有意義的數(shù)字妆偏。不過(guò),如果對(duì)它調(diào)用parseInt()方法盅弛,返回的是NaN钱骂。根據(jù)規(guī)則,任何包含NaN的關(guān)系運(yùn)算符都要返回false挪鹏,因此這段代碼也輸出 false见秽。
<br />
等性運(yùn)算符
ECMAScript 提供了兩套等性運(yùn)算符:等號(hào)和非等號(hào)用于處理原始值,全等號(hào)和非全等號(hào)用于處理對(duì)象讨盒。
等號(hào)和非等號(hào)(== & !=)
為確定兩個(gè)運(yùn)算數(shù)是否相等解取,這兩個(gè)運(yùn)算符都會(huì)進(jìn)行類型轉(zhuǎn)換。
執(zhí)行類型轉(zhuǎn)換的規(guī)則如下:
- 如果一個(gè)運(yùn)算數(shù)是Boolean值催植,在檢查相等性之前肮蛹,把它轉(zhuǎn)換成數(shù)字值勺择。false轉(zhuǎn)換成0,true為 1伦忠。
- 如果一個(gè)運(yùn)算數(shù)是字符串省核,另一個(gè)是數(shù)字,在檢查相等性之前昆码,要嘗試把字符串轉(zhuǎn)換成數(shù)字(parseInt)气忠。
- 如果一個(gè)運(yùn)算數(shù)是對(duì)象,另一個(gè)是字符串赋咽,在檢查相等性之前旧噪,要嘗試把對(duì)象轉(zhuǎn)換成字符串(toString)。
- 如果一個(gè)運(yùn)算數(shù)是對(duì)象脓匿,另一個(gè)是數(shù)字淘钟,在檢查相等性之前,要嘗試把對(duì)象轉(zhuǎn)換成數(shù)字(parseInt)陪毡。
在比較時(shí)米母,該運(yùn)算符還遵守下列規(guī)則: - 值 null 和 undefined 相等。
- 在檢查相等性時(shí)毡琉,不能把null和undefined轉(zhuǎn)換成其他值铁瞒。
- 如果某個(gè)運(yùn)算數(shù)是NaN,等號(hào)將返回false桅滋,非等號(hào)將返回true慧耍。
- 如果兩個(gè)運(yùn)算數(shù)都是對(duì)象,那么比較的是它們的引用值丐谋。如果兩個(gè)運(yùn)算數(shù)指向同一對(duì)象芍碧,那么等號(hào)返回 true,否則兩個(gè)運(yùn)算數(shù)不等笋鄙。
<br />
全等號(hào)和非全等號(hào)(=== & !==)
這兩個(gè)運(yùn)算符所做的與等號(hào)和非等號(hào)相同师枣,只是它們?cè)跈z查相等性前怪瓶,不執(zhí)行類型轉(zhuǎn)換萧落。
全等號(hào)由三個(gè)等號(hào)表示(===),只有在無(wú)需類型轉(zhuǎn)換運(yùn)算數(shù)就相等的情況下洗贰,才返回true找岖。
var sNum = "66";
var iNum = 66;
alert(sNum == iNum); // 輸出 "true"
alert(sNum === iNum); // 輸出 "false"
非全等號(hào)由感嘆號(hào)加兩個(gè)等號(hào)(!==)表示,只有在無(wú)需類型轉(zhuǎn)換運(yùn)算數(shù)不相等的情況下敛滋,才返回true许布。
var sNum = "66";
var iNum = 66;
alert(sNum != iNum); // 輸出 "false"
alert(sNum !== iNum); // 輸出 "true"
<br />
條件運(yùn)算符(?)
條件運(yùn)算符是ECMAScript中功能最多的運(yùn)算符,它的形式與Java中的相同绎晃。
variable = boolean_expression ? true_value : false_value;
如果Boolean_expression為true蜜唾,就把true_value賦給變量杂曲;如果它是false,就把false_value賦給變量袁余。
<br />
賦值運(yùn)算符(=)
簡(jiǎn)單的賦值運(yùn)算符由等號(hào)(=)實(shí)現(xiàn)擎勘,只是把等號(hào)右邊的值賦予等號(hào)左邊的變量。
每種主要的算術(shù)運(yùn)算以及其他幾個(gè)運(yùn)算都有復(fù)合賦值運(yùn)算符:
- 乘法/賦值(*=)
- 除法/賦值(/=)
- 取模/賦值(%=)
- 加法/賦值(+=)
- 減法/賦值(-=)
- 左移/賦值(<<=)
- 有符號(hào)右移/賦值(>>=)
- 無(wú)符號(hào)右移/賦值(>>>=)
<br />
逗號(hào)運(yùn)算符(,)
用逗號(hào)運(yùn)算符可以在一條語(yǔ)句中執(zhí)行多個(gè)運(yùn)算颖榜。
例如:
var iNum1 = 1, iNum = 2, iNum3 = 3;
<br />
更多請(qǐng)參考:W3School