javaScript常用運算符和操作符總結
類別 |
操作符 |
算術操作符 | +、 –、 *、 /、 %(取模) |
字符串操作符 | + 字符串連接 +=字符串連接復合 |
布爾操作符 | !、 &&、 || |
一元操作符 | ++ 、 -- 、 +(一元加)、 -(一元減) |
關系比較操作符 | < 、 <= 、 > 、>=、 != 、 == 、 === 、 !== |
按位操作符 | ~ 按位非 &按位與 | 按位或 ^按位異或 <<左移 >>有符號右移 >>>無符號右移 |
賦值操作符 | = 、 復合賦值(+=、-=、*=、%=) 復合按位賦值(~=、&=、|=、^=、<<=、>>=、>>>=) |
對象操作符 | .屬性訪問、[]屬性或數組訪問、 new調用構造函數常見對象、delete變量屬性刪除、void(返回undefined)、in判斷屬性、instanceof原型判斷 |
其它操作符 | ?: 條件操作符、,逗號操作符、()分組操作、typeof類型操作符 |
注意事項:
1. 算數操作符
1.1 除了加號(+)之外,如果操作數不是Number類型,會自動先調用Number()將其轉換為Number類型再進行計算。
1.2 除號(/)和取模(%)並不會區分整數和浮點數,都會自動轉化為浮點數,比如 9 / 2 = 4.5 而不是4,5.3 % 3 = 2.3 而不是2。
1.3 任意運算,只要操作數含NaN,結果就是NaN。但並不是結果為NaN就一定有一個操作數為NaN,比如0/0也返回NaN。
2. 字符串操作符
2.1 字符串連接符號(+)相當於concat()函數,會將操作數據轉化為字符串,再連接。在字符串和數值型進行+號運算時,會將數值型轉為字符串。
3. 布爾操作符
3.1 &&邏輯與常被應用判斷一個變量或屬性是否有定義,例如:
if(object && object.name && object.name = 'name'){ //這里會首先判斷object存在,不存在的話就不會解析object.name從而阻止錯誤的發生,同樣,也只有object.name存在,才會去比較這個值。 }
3.2 ||邏輯或常被應用提供默認值的情況,和?問號操作符類似。例如
function Fn(obj){ obj = obj || {}; //這里如果調用Fn未傳入obj,則會自動給obj賦值為undefined,然后因為undefined的相應Boolean值為false, //所以會將一個空對象{}賦值給obj,如果調用傳入了obj,則因為任意對象的Boolean值為true, //所以就不會取后面的{},從而達到給obj一個默認值{}的效果。 }
4. 一元操作符
4.1 前置自增(減)會先自增(減)再參與其它運算,后置先參與其它運算再自增(減)。
4.2 對於不是Number類型的值進行自增自減時會先將其隱式轉換為Number類型,然后再自增(減)。
5. 關系比較操作符
5.1 比較雙方都為字符串時,則會從前往后逐個比較字符編碼值,只要有較大者就終止比較,不會往后進行。
5.2 比較雙方有一個Number類型,則會將非Number類型數據轉為Number類型值再比較。
5.3 操作符是對象時,調用valueOf()(如果沒有,就調用toString()),再將結果進行比較。
5.4 任何數和NaN比較都會返回false.
6. 對象操作符
6.1 通過[]可以訪問名稱是一個變量或含有特殊字符的屬性,名稱為普通確定值時用.點號訪問對象屬性。
6.2 new 調用構造函數創建一個對象,在構造函數內部的this被指向這個新創建的對象。
6.3 delete,刪除變量或屬性,(變量可以看成是全局對象或執行環境的一個屬性)
7. 其它操作符
7.1 typeof是一個操作符,而不是函數,返回一個字符串值,(有些會根據瀏覽器極其版本不同而略有不同)
類型 |
typeof值 |
類型 |
typeof值 |
類型 |
typeof值 |
Undefined | 'undefined' | Null | 'object' | Boolean | 'boolean' |
Number | 'number' | String | 'string' | 內置Function對象的實例 | 'function' |
typeof一般用來判斷簡單數據類型,如果是對象類型,因為大部分返回的都是object,實際一般不會使用;
而instanceof的判斷也需要滿足同一個上下文的條件,否則也會出錯,
8.常用方式:
8.1 使用一元加號+直接隱式轉換為Number類型。 例如:console.info(+true); //1,一元操作符,轉換為數值1
8.2 使用加空字符串可直接隱式轉為String類型。 例如:console.info(''+true); //true,隱式轉換為字符串'true'
8.3 使用雙重邏輯非!!隱式轉換為Boolean類型。 例如:var a='a’; console.info(!!a); //true 兩次取反,將其隱式轉換為boolean類型
8.4 使用邏輯與&&來檢測對象或其屬性是否存在並進行后續操作。 例如:object && object.name && object.name = 'name';
8.5 使用邏輯或||來給函數參數提供默認值,也常用?問號條件操作符提供默認值。 例如: obj = obj || {};
8.6 使用花括號{}來定義對象字面量,JSON數據格式和代碼塊。 例如: var obj = {};
8.7 使用中括號[]來定義數組字面量,JSON數據格式,訪問數組,訪問名稱是變量或特殊字符的屬性。 例如: obj[this.index]
8.8 按位運算可應用一些場所:如不使用中間變量直接交換兩個數值、判斷奇數和偶數、MD5加密等等。