一次弄懂Javascript的各類運算符

算數運算符

令y = 5 web

"+"做爲二元運算符

規則

  1. Infinity + Infinity = Infinity
  2. (-Infinity) + (-Infinity) = -Infinity
  3. Infinity + (-Infinity) = NaN
  4. Infinity + null = Infinity
  5. 0 + 0 = 0
  6. -0 + -0 = -0
  7. +0 + -0 = +0
  8. 若是是兩個字符串,則將字符串進行拼接
  9. 若是有一個是字符串一個不是字符串,則將非字符串轉換成字符串再拼接
  10. 若是操做數都不是字符串類型,則將操做數轉換爲數值類型再相加}

"+"做爲一元運算符

做用

於Number()相同,將其餘類型的對象轉換爲數字類型數組

let two = "2";
 let three = "3";  console.log(+two + +three); // 5  先將字符串轉換爲數字再相加,由於一元運算符的優先級比二元運算符的優先級更高 複製代碼

"-"運算符

規則

  1. Infinity - Infinity = NaN
  2. (-Infinity) - (-Infinity) = -NaN
  3. Infinity - (-Infinity) = Infinity
  4. Infinity - null = Infinity
  5. 0 - 0 = 0
  6. -0 - -0 = -0
  7. +0 - -0 = +0
  8. 與NaN相關的減法運算結果都爲NaN
  9. 若是有一個操做數是對象,則先對對象進行隱式轉換,再根據前面的規則進行減法運算
  10. 若是果有一個操做數是非數字類型則先在後臺調用 Number()函數將其轉換爲數值,再根據前面的規則進行減法運算。

對隱式轉換不瞭解的話能夠看看這篇文章一次弄懂Javascript隱式轉換編輯器

"*"運算符

規則

  1. Infinity * 0 = NaN
  2. Infinity * null = NaN
  3. Infinity * undefined = NaN
  4. Infinity * Infinity = Infinity
  5. 若是操做數的值超過數值的表示範圍,結果爲Infinity 或 - Infinity
  6. 若是操做數中有一個操做數爲NaN,結果爲NaN
  7. 若是操做數中有一個操做數爲undefined,結果爲NaN
  8. 若是有一個操做數是對象,則先對對象進行隱式轉換,再根據前面的規則進行乘法運算
  9. 若是有一個操做符不是數值類型,則先調用Number()進行轉換,再根據前面的規則進行乘法運算

"/"運算符

規則

  1. Infinity / 0 = Infinity
  2. Infinity / null = Infinity
  3. Infinity / undefined = NaN
  4. Infinity / Infinity = NaN
  5. 若是操做數的值超過數值的表示範圍,結果爲Infinity 或 - Infinity
  6. 若是操做數中有一個操做數爲NaN,結果爲NaN
  7. 若是操做數中有一個操做數爲undefined,結果爲NaN
  8. 若是有一個操做數是對象,則先對對象進行隱式轉換,再根據前面的規則進行除法運算
  9. 若是有一個操做符不是數值類型,則先調用Number()進行轉換,再根據前面的規則進行除法運算

"%"運算符

規則

  1. 操做數都是數值,執行常規的除法計算,返回除的餘數
  2. 任何數 % undefined = NaN
  3. 任何數 % NaN = NaN
  4. Infinity % 任何數 = NaN
  5. 有限大的數 % 0 = NaN
  6. 有限大的數 % Infinity = 有限大的數
  7. 0 % 除null、undefined、NaN任何數 = 0
  8. 若是有一個操做數是對象,則先對對象進行隱式轉換,再根據前面的規則進行取餘運算
  9. 有一個操做數不是數值,則調用Number()轉換

"++"運算符

規則

  1. 應用於非數字類型的時候,先將其轉換爲數字,再執行++的操做
  2. 應用於浮點數,執行加1的操做
  3. 應用於對象,先對對象進行隱式轉換,再根據前面的規則進行++運算

"--"運算符

規則

  1. 應用於非數字類型的時候,先將其轉換爲數字,再執行--的操做。
  2. 應用於浮點數,執行減1的操做
  3. 應用於對象,先對對象進行隱式轉換,再根據前面的規則進行--運算

"**"運算符

做用

進行冪運算函數

語法

操做數 ** 冪post

console.log(2 ** 3);     // 8
 console.log(8 ** (1/3)); // 2 複製代碼

賦值運算符

=、+=、-=、*=、/=、%=

令x = 10 y = 5ui

比較運算符

==、===、!=、!==

令x = 5spa

規則

  1. 若是操做數是布爾類型,比較以前先將其轉換成數值,false爲0,true爲1
  2. 若是操做數是字符類型,另外一個是對象,對象先進行隱式轉換,再進行比較
  3. 若是操做數是字符類型,另外一個操做數是數值,則將字符串轉換爲數值在比較
  4. null == undefined 爲true
  5. null與undefined之外的任何數都不想等。
  6. NaN與任何數都不相等
  7. 若是兩個操做數都是對象,比較是否是同一個對象,若是是則返回true不然false

關係運算符

>、<、>=、<=

規則

  1. 兩個操做數都是數值,則執行數值比較
  2. 兩個操做數都是字符串, 則比較兩個字符串對應的ascii碼
  3. 若是一個操做數是對象,將對象隱式轉換後再比較。
  4. 若是一個操做數非數值類型,則將其轉換爲數字類型再比較

邏輯運算符

令x = 6 y = 33d

"&&"運算符

規則

  1. 若是第一個操做數是對象,則返回第二個操做數
  2. 若是第二個操做數是對象,則只有在第一個操做數的值爲true的狀況下才會返回該對象
  3. 若是兩個操做數都是對象,則返回第二個操做數
  4. 若是有一個操做數是null,則返回null
  5. 若是有一個操做數是NaN, 則返回NaN
  6. 若是有一個操做數是undefined,則返回undefined

"||"運算符

規則

  1. 第一個操做數是對象,則返回第一個操做數
  2. 第一個操做數的求值結果爲false,則返回第二個操做數
  3. 兩個操做數都是對象,則返回第一個操做數
  4. 兩個操做數都是null,則返回null
  5. 兩個操做數都是NaN,則返回NaN
  6. 兩個操做數都是undefined,則返回undefined

"!"運算符

規則

  1. 若是操做數是一個空字符串,返回true
  2. 若是操做數是數值0,返回true
  3. 若是操做數是null,返回true
  4. 若是操做數是NaN,返回true
  5. 若是操做數是undefined,返回true
  6. 其餘狀況返回false

位運算符

"&"按位與運算符

做用

&對操做數的二進制數中對應的每一位都作與算,若是對應位都爲1則結果爲1,若是對應位有一個是0,則結果爲0code

1 的二進制表示爲: 00000000 00000000 00000000 00000001
3 的二進制表示爲: 00000000 00000000 00000000 00000011 console.log(1 & 3) // 1 複製代碼

"|"按位或運算符

做用

|對操做數的二進制數中對應的每一位都作運算,若是對應位都爲0則結果爲0,若是對應位有一個是1,則結果爲1cdn

1 的二進制表示爲: 00000000 00000000 00000000 00000001
3 的二進制表示爲: 00000000 00000000 00000000 00000011 console.log(1 | 3) // 3 複製代碼

"~"按位非運算符

做用

~對操做數的二進制數對應的每一位都作運算,若是對應位爲0則結果爲1,若是對應位爲1則結果爲0

1 的二進制表示爲: 00000000 00000000 00000000 00000001 
3 的二進制表示爲: 00000000 00000000 00000000 00000011 ----------------------------- 1 反碼二進制表示: 11111111 11111111 11111111 11111110 因爲第一位(符號位)是1,因此這個數是一個負數。JavaScript 內部採用補碼形式表示負數,即須要將這個數減去1,再取一次反,而後加上負號,才能獲得這個負數對應的10進制值。 ----------------------------- 1 的反碼減 111111111 11111111 11111111 11111101  再取反: 00000000 00000000 00000000 00000010 表示爲10進制加負號:-2 console.log(~ 1) // -2 複製代碼

"^"按位異或運算符

做用

^對操做數的二進制數中對應的每一位都作異或操做,當對應位的值不一樣時,結果爲1,不然爲0

1 的二進制表示爲: 00000000 00000000 00000000 00000001
3 的二進制表示爲: 00000000 00000000 00000000 00000011 / console.log(1 ^ 3) // 2 複製代碼

"<<"左移運算符

做用

<<運算符使指定值的二進制數全部位都左移指定位數

移動規則

丟棄高位,低位補0即按二進制形式把全部的數字向左移動對應的位數,高位移出(捨棄),低位的空位補零。

1 的二進制表示爲: 00000000 00000000 00000000 00000001 
2 的二進制表示爲: 00000000 00000000 00000000 00000010 console.log(1 << 1) // 2 複製代碼

">>"有符號右移運算符

做用

>>運算符使指定值的二進制數全部位都右移指定位數

移動規則

向右被移出的位被丟棄,拷貝最左側的位以填充左側。因爲新的最左側的位老是和之前相同,符號位沒有被改變。

1 的二進制表示爲: 00000000 00000000 00000000 00000001 
0 的二進制表示爲: 00000000 00000000 00000000 00000000 console.log(1 >> 1) // 0 複製代碼

">>>"無符號右移運算符

做用

>>>運算符使指定值的二進制數全部位都右移指定位數

移動規則

向右被移出的位被丟棄,左側用0填充。由於符號位變成了0,因此結果老是非負的。對於非負數,有符號右移和無符號右移老是返回相同的結果。

條件運算符

語法

判斷條件 ? 條件爲真時的操做 : 條件爲假時的操做

let num = 2;
num > 1 ? console.log("對"):console.log("錯"); // "對"  複製代碼

類型運算符

typeof運算符

做用

返回變量的類型

console.log(typeof null);     // object 
 console.log(typeof undefined);// undefined  console.log(typeof []); // object  console.log(typeof {}); // object  console.log(typeof true); // boolean  console.log(typeof "123"); // string  console.log(typeof 123); // number 複製代碼

typeof檢測類型並不許確,準確的檢測方法與各類檢測方法的介紹和對比請查看深刻理解JS數據類型檢測

instanceof

語法

a instance of

做用

查看a是不是b的實例,是則返回true,不是則返回false

注意事項

原型鏈能夠被修改,因此這種方法一樣不許確,詳情查看深刻理解JS數據類型檢測

其餘運算符

"."點運算符

做用

讀取對象的屬性值,點只能用在對象上面,若點前面不是對象,則先將其變爲對象,調用完以後再改回原來的類型

void運算符

做用

求表達式的值,或執行語句,而後void的值老是爲undefined。

在a標籤中return false能夠阻止默認動做,將其改成void(f())做用相同。

","逗號運算符

語法

表達式1,表達式2,...,表達式n

做用

忽略第一個操做數,返回第二個操做數

注意事項

逗號操做符的優先級比"="低

delete運算

做用

delete運算符用來刪除對象屬性或者數組元素,若是刪除成功或所刪除的目標不存在,delete將返回true。

注意事項

不是全部的屬性均可刪除,一些內置核心和客戶端屬性是不能刪除的,經過 var 語句聲明的變量不能刪除,經過 function 語句定義的函數也是不能刪除的。

in運算符

語法

a in b

做用

判斷操做數a是否做爲屬性名存在於對象b中,是則返回true,不是則則返回false

let obj = {
 a: 1  }  console.log("a" in obj); // true 複製代碼
相關文章
相關標籤/搜索