標籤:
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,//所以會將一個Null 物件{}賦值給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 使用加Null 字元串可直接隱式轉為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加密等等。
javaScript常用運算子和操作符總結