一、一元運算子
1、delete 運算子:刪除對以前定義的對象屬性或方法的引用。例如:
var o=new Object;
o.name="superman";
alert(o.name); //輸出 "superman"
delete o.name;
alert(o.name); //輸出 "undefined"
刪除了name屬性,將其設定為undefined(即建立的未初始化的變數的值)。delete不能刪除開發人員未定義(即ECMAScript定義)的屬性和方法。
例如,下面的代碼將發生錯誤:delete o.toString();
2、void 運算子: 對任何值都返回undefined。該運算子通常用於避免輸出不應該輸出的值。
例如:在HTML頁面中 <a href="javascript:window.open('about:blank')">Click Me</a>
點擊該連結,網頁中的連結消失,顯示"[object]" (IE中,Firefox中顯示"[object Window]",Google中還是該連結)。因為window.open()方法返回了對新開啟的視窗的引用。然後該對象被轉換成要顯示的字串。要避免這種結果,可以用 void 運算子調用 window.open() 函數:
<a href="javascript:void(window.open('about:blank'))">Click Me</a>
這使window.open()調用返回undefined,它不是有效值,不會顯示在瀏覽器視窗中。
3、前增量/前遞減運算子:與C中的用法一樣。運算都發生在計算運算式之前。如:++i; --i 。
4、後增量/後遞減運算子:尾碼式運算子是在計算過包含它們的運算式後才進行增量或減量運算。如:i++; i-- 。
5、一元加法和一元減法
一元加法本質上對數字無任何影響: var iNum=25; iNum=+iNum; alert(iNum); //輸出25
一元加法運算子對對字串進行操作時,它計算字串的方式與 parseInt() 相似,主要的不同是對以"0x"開頭的字串(表示十六進位數字),一元運算子才能將它轉換成十進位的值。因此,用一元加法轉換"010",得到的總是10,而"0xB"將被轉換成11。
var sNum="25"; alert(typeof sNum); //輸出 "string"
var iNum=+sNum; alert(typeof iNum); //輸出 "number"
一元減法就是對數值求負,與一元加法運算子相似,一元減法運算子也會把字串轉換成近似的數字,此外還會對該值求負。
var sNum = "25"; alert(typeof sNum); //輸出 "string"
var iNum = -sNum; alert(iNum); //輸出"-25"
alert(typeof iNum); //輸出 "number"
二、位元運算符:與二進位有關的一系列運算子,實際操作中貌似不怎麼用,就略過了……
位元運算符NOT由否定號(~)表示。
位元運算符AND由和號(&)表示。
位元運算符OR由符號(|)表示。
位元運算符XOR由符號(^)表示。
左移運算由兩個小於符號表示(<<)。
有符號右移運算子由兩個大於符號(>>)表示。
無符號右移由三個大於符號(>>>)表示。
三、Boolean運算子
Boolean運算子有三種,即NOT、AND 和 OR。
1、邏輯NOT,用驚嘆號(!)表示。該運算子通常用於控制迴圈。與邏輯OR和邏輯AND運算子不同的是,邏輯NOT運算子返回的一定是Boolean值。邏輯NOT運算子的行為如下:
如果運算數是對象,返回false。
如果運算數是數字0,返回true。
如果運算數是0意外的任何數字,返回false。
如果運算數是null,返回true。
如果運算數是NaN,返回true。
如果運算數是undefined,發生錯誤。
例: var b = true;
while(!b){ …… }
2、邏輯 AND 運算子,用雙和號(&&)表示。結果為 true 時只有一種情況:true && true = true;
邏輯AND運算的運算數可以是任何類型的,不止是Boolean值。如果某個運算數不是原始的Boolean型值,邏輯AND運算不一定返回Boolean值:
如果一個運算數是對象,另一個是Boolean值,返回該對象。
如果兩個運算數都是對象,返回第二個對象。
如果某個運算數是null,返回null。
如果某個運算數是NaN,返回NaN。
如果某個運算數是undefined,發生錯誤。
如果第一個運算數是false,那麼無論第二個運算數的值是什麼,結果都不可能為true。
3、邏輯OR運算子,用雙豎線(||)表示。結果為false的情況只有一種:false || false=false; 其他情況均為true。
與邏輯AND運算子相似,如果某個運算數不是Boolean值,邏輯OR運算並不一定返回Boolean值:
如果一個運算數是對象,另一個是Boolean值,返回該對象。
如果兩個運算數都是對象,返回第一個對象。
如果某個運算數是null,返回null。
如果某個運算數是NaN,返回NaN。
如果某個運算數是undefined,發生錯誤。
邏輯OR也是簡便運算,對於邏輯OR運算子來說,如果第一個運算數值為true,就不再計算第二個運算數。
四、乘性運算子
1、乘法運算子,用星號(*)表示,用於兩個數相乘。但在處理特殊值時,ECMAScript中的乘法還有一些特殊行為:
如果運算數都是數字,執行常規的乘法運算,如果結果太大或太小,那麼產生的結果就是Infinity或-Infinity。
如果某個運算數是NaN,結果為NaN。
Infinity 乘以0,結果為NaN。
Infinity 乘以0以外的任何數字,結果為Infinity或-Infinity,由第二個運算數的符號決定。
2、除法運算子,用斜線(/)表示,用第二個數除第一個數。對於特殊值,特殊行為如下:
如果運算數都是數字,執行常規的觸發運算,如果結果太大或太小,那麼產生的結果是Infinity或-Infinity。
如果某個運算數是NaN,結果為NaN。
0除一個非無窮大的數字,結果為NaN。
Infinity被0以外的任何數字除,結果為Infinity或-Infinity,由第二個運算數的符號決定。
3、模數運算子,用百分比符號(%)表示。如果運算數都是數字,執行常規算術除法運算,返回餘數。特殊行為:
如果被除數是 Infinity,或者除數是0,結果為NaN。
如果除數是無窮大的數,結果為被除數。
如果被除數為0,結果為0。
五、加性運算子
1、加法運算子(+),特殊行為:
某個運算數是NaN,結果為NaN。
Infinity 加-Infinity,結果為NaN。
如果某個運算數是字串,那麼採用下列規則:
如果兩個運算數都是字串,把第二個字串串連到第一個字串上。
如果只有一個運算數是字串,把另一個運算數轉換成字串,結果是兩個字串串連成的字串。
2、減法運算子(-),如果兩個運算數都是數字,將執行算術減法。特殊規則:
如果運算數是NaN,結果為NaN。
某個運算數不是數字,結果為NaN。
六、關係運算子
關係運算子小於、大於、小於等於和大於等於執行的是兩個數的比較運算,比較方式與算術比較運算相同。每個關係運算子都返回一個Boolean值。
對於字串,第一個字串中每個字元的代碼都會與第二個字串中對應位置上的字元的代碼進行數值比較。
1、大寫字母的代碼都小於小寫字母的代碼,所以要得到按照真正的字母順序比較結果,必須把兩個運算數轉換成相同的大小寫形式,再進行比較。
2、在比較兩個字串形式的數字時,比較的是它們的字元代碼。
3、比較一個字串和數字,ECMAScript都會把字串轉換為數字,然後按照數字順序比較它們。如果字串不能轉換成數字,那麼返回NaN,任何包含NaN的關係運算都要返回false。因此,這樣會返回false。
七、等性運算子
1、等號(==) 和非等號(!=),為確定兩個運算數是否相等,這兩個運算子都會進行類型轉換。執行類型轉換的基本規則如下:
如果一個運算數是Boolean值,在檢查相等性之前,把它轉換成數字值。False轉換成0,true轉換成1。
如果一個運算數是字串,另一個是數字,在檢查相等性之前,要嘗試把字串轉換成數字。
如果一個運算數是對象,另一個是字串,在檢查等性之前,要嘗試把對象轉換成字串(調用toString()方法)。
如果一個運算數是對象,另一個是數字,在檢查等性之前,要嘗試把對象轉換成數字。
在進行比較時,該運算子還遵守下列規則:
值null和undefined相等。
在檢查相等性時,不能把null和undefined轉換成其他值。
如果某個運算數是NaN,等號將返回false,非等號將返回true。即使兩個運算數都是NaN,等號仍然返回false,因為根據規則,NaN不等於NaN。
如果兩個運算數都是對象,那麼比較的是他們的引用值。如果兩個運算數指向同一個對象,那麼等號返回true,否則兩個運算數不等。
![]()
2、全等號和非全等號
等號和非等號的同類運算子是全等號和非全等號。這兩個運算子所做的與等號和非等號相同,只是他們在檢查相等性前,不執行類型轉換。
全等號由三個等號(===)表示,只有在無需類型轉換運算數就相等的情況下,才返回true。
var sNum="55"; var iNum=55; alert(sNum==iNum); //輸出 "true"
alert(sNum===iNum); //輸出 "false"
非全等號由兩個驚嘆號加兩個等號(!==)表示,只有在無需類型轉換運算數不相等的情況下,才返回true。
var sNum="55"; var iNum=55; alert(sNum != iNum); //輸出 "false"
alert(sNum !== iNum); //輸出 "true"
八、其他運算子
1、條件運算子,即三元運算子 : variable = boolean_expression ? true_value : false_value;
2、賦值運算子(=) 複合賦值運算子:+=、-=、*=、/=、%=、<<=、>>=、>>>=
3、逗號運算子 用逗號運算子可以在一條語句中執行多個運算。 如: var iNum1=1,iNum2=2;