一元操作符
只能操作一個值的操作符叫一元操作符。
一元操作符是ECMAScript中最簡單的操作符。
1.遞增和遞減操作符
遞增遞減操作符直接借鑒C,而且各有兩個版本:前置型和後置型。顧明思義,前置型應該讓位於要操作的變量之前,而後置型應該位於要操作的變量之後。
前置型:
var num1 = 1; var num2 = 2; var num3 = ++num1 + num2;//4
後置型:
var num1 = 1; var num2 = 2; var num3 = num1++ + num2;//3
上述兩段代碼得出了不同的結果,原因就在與,後置遞增遞減與前置遞增遞減有一個非常重要的區別,即後置遞增遞減操作是在包含它們的語句被求值之後才執行的。
適用范圍:
前置遞增遞減與後置遞增遞減所有這四個操作符對任何值都適用。應用於不同值時,該操作符會像Number()轉型函數一樣對值進行轉換,轉化後進行加減1的操作。
2.一元加和減操作符
一元加和減操作符主要用於基本的算術運算,也可以用於轉換數據類型(該操作符會像Number()轉型函數一樣對這個值進行轉換)。
布爾操作符
布爾操作符一共有三個:非(NOT)、與(AND)、或(OR)。
1.邏輯非
邏輯非操作符由一個歎號表示(!),可以應用於ECMAScript中的任何值。無論這個值是什麼數據類型,這個操作符都會返回一個布爾值。
同時使用兩個邏輯非操作符,實際上就會模擬Boolean()轉型函數的行為
2.邏輯與
邏輯與操作符由兩個和號(&&)表示,有兩個操作數且可運用於任何類型的操作數。邏輯與屬於短路操作,即如果第一個操作數求值結果是false,那麼就不會對第二個操作數求值。
當兩個值都為真值時,結果為true。當兩個值為一真一假時,結果為false。當兩個值都為假值時,返回false。
其中一個值不是布爾值時:遵循下列規則
第一個操作數為假,返回第一個;
第一個操作數為真的時候,返回第二個。
如果第一個操作數是對象,則返回第二個操作數
var a = {b:1}; a && 'ss'//"ss"
如果第二個操作數是對象,則只有在第一個操作數的求值結果為true的情況下才會返回該對象
'ss' && a//Object {b: 1}
如果兩個操作數都是對象,則返回第二操作數
var c = {d:2}; c && a//Object {b: 1}
(1)如果有一個操作數是null,則返回null
(2)如果有一個操作數是NaN,則返回NaN
(3)如果有一個操作數是undefined,則返回undefinded
3.邏輯或
與邏輯與操作符相似,邏輯或操作符也是短路操作符。也就是說,如果第一個操作數的求值結果為true,就不會對第二個操作數求值了。
(1)第一個操作數為真,返回第一個
(2)第一個操作數為假,返回第二個
乘性操作符
ECMAScript定義了3個乘性操作符:乘法、除法和模
Infinity*0//NaN 0/0//NaN Infinity/Infinity//NaN
加性操作符
1.加法(轉字符串)
兩個操作符都是數值
執行常規的加法計算。
Infinity + -Infinity//NaN
如果有一個操作數是字符串
如果兩個操作符都是字符串,則將第二個操作符與第一個操作符拼接起來
如果只有一個操作符是字符串,則將另一個操作數轉換為字符串,然後再將兩個字符串拼接起來。
如果這個操作數是對象、數值或布爾值,則調用它們的toString()方法取得相應的字符串值,然後再應用前面關於字符串的規則。對於null和undefined,則分別調用String()函數並取得字符串"undefined"和"null"。
2 + '' //"2"
2.減法(轉數值)
如果兩個操作數都是數值
執行常規的算術減發操作並返回結果,如果有一個操作數是NaN,則結果是NaN
Infinity - Infinity//NaN
如果有一個操作數不是數值
如果有一個操作數是字符串、布爾值、null或undefined,則先在後台調用Number()函數將其轉換為數值,然後再根據前面的規則執行減法計算。如果轉化的結果是NaN,則減法的結果就是NaN。
如果有一個操作數是對象,則調用對象的valueOf()方法以取得表示該對象的數值。如果得到的值是NaN,則減法的結果是NaN。如果對象沒有valueOf()方法則調用其toString()方法並將得到的字符串轉換為數值。
5 - true//4
關系操作符
如果兩個操作數都是數值,則執行數值比較
如果兩個操作數都是字符串,則比較兩個字符串對應的字符編碼值
如果一個操作數是數值,則將另一個操作數轉換為數值,然後執行數值比較
var result = '23' < '3'//true var result = '23' < 3//false
相等操作符
1.相等和不相等
先轉換再比較
(1)如果有一個操作數是布爾值,則在比較相等性之前,先將其轉換為數值
(2)如果有一個操作數是字符串,另一個操作數是數值,先將其轉換為數值
(3)如果有一個操作數是對象,另一個不是,則調用對象的valueOf()方法,用得到的基本類型值按前面的基本規則進行比較
null和undefined是相等的
要比較相等性之前不能將null和undefined轉換為任何其他值
如果兩個操作數都是NaN,相等操作符也返回false,按規則,NaN不等於NaN
2.全等和不全等
僅比較而不轉換
"55" !== 55 //true
條件操作符
variable = boolean_expression ? true_value : false_value
本質上,這段代碼的含義就是基於對boolean_expression求值的結果,決定給變量variable賦什麼值。如果求值結果為true,則給變量賦true_value;如果求值結果為false,則給變量variable賦false_value值。
賦值操作符
簡單的賦值操作符由等號表示,其作用就是把右側的值賦給左側的變量。
逗號操作符
逗號操作符多用於聲明多個變量;但除此之外,逗號操作符還用來賦值。在用於賦值時,逗號操作符總會返回表達式中的最後一項。