令y = 5
web
Infinity + Infinity = Infinity (-Infinity) + (-Infinity) = -Infinity Infinity + (-Infinity) = NaN Infinity + null = Infinity 0 + 0 = 0 -0 + -0 = -0 +0 + -0 = +0 若是是兩個字符串,則將字符串進行拼接 若是有一個是字符串一個不是字符串,則將非字符串轉換成字符串再拼接 若是操做數都不是字符串類型,則將操做數轉換爲數值類型再相加}
於Number()相同,將其餘類型的對象轉換爲數字類型數組
let two = "2";
let three = "3"; console.log(+two + +three); // 5 先將字符串轉換爲數字再相加,由於一元運算符的優先級比二元運算符的優先級更高 複製代碼
Infinity - Infinity = NaN (-Infinity) - (-Infinity) = -NaN Infinity - (-Infinity) = Infinity Infinity - null = Infinity 0 - 0 = 0 -0 - -0 = -0 +0 - -0 = +0 與NaN相關的減法運算結果都爲NaN 若是有一個操做數是對象,則先對對象進行隱式轉換,再根據前面的規則進行減法運算 若是果有一個操做數是非數字類型則先在後臺調用 Number()函數將其轉換爲數值,再根據前面的規則進行減法運算。
對隱式轉換不瞭解的話能夠看看這篇文章一次弄懂Javascript隱式轉換編輯器
Infinity * 0 = NaN Infinity * null = NaN Infinity * undefined = NaN Infinity * Infinity = Infinity 若是操做數的值超過數值的表示範圍,結果爲Infinity 或 - Infinity 若是操做數中有一個操做數爲NaN,結果爲NaN 若是操做數中有一個操做數爲undefined,結果爲NaN 若是有一個操做數是對象,則先對對象進行隱式轉換,再根據前面的規則進行乘法運算 若是有一個操做符不是數值類型,則先調用Number()進行轉換,再根據前面的規則進行乘法運算
Infinity / 0 = Infinity Infinity / null = Infinity Infinity / undefined = NaN Infinity / Infinity = NaN 若是操做數的值超過數值的表示範圍,結果爲Infinity 或 - Infinity 若是操做數中有一個操做數爲NaN,結果爲NaN 若是操做數中有一個操做數爲undefined,結果爲NaN 若是有一個操做數是對象,則先對對象進行隱式轉換,再根據前面的規則進行除法運算 若是有一個操做符不是數值類型,則先調用Number()進行轉換,再根據前面的規則進行除法運算
操做數都是數值,執行常規的除法計算,返回除的餘數 任何數 % undefined = NaN 任何數 % NaN = NaN Infinity % 任何數 = NaN 有限大的數 % 0 = NaN 有限大的數 % Infinity = 有限大的數 0 % 除null、undefined、NaN任何數 = 0 若是有一個操做數是對象,則先對對象進行隱式轉換,再根據前面的規則進行取餘運算 有一個操做數不是數值,則調用Number()轉換
應用於非數字類型的時候,先將其轉換爲數字,再執行++的操做 應用於浮點數,執行加1的操做 應用於對象,先對對象進行隱式轉換,再根據前面的規則進行++運算
應用於非數字類型的時候,先將其轉換爲數字,再執行--的操做。 應用於浮點數,執行減1的操做 應用於對象,先對對象進行隱式轉換,再根據前面的規則進行--運算
進行冪運算函數
操做數 ** 冪post
console.log(2 ** 3); // 8
console.log(8 ** (1/3)); // 2 複製代碼
令x = 10 y = 5
ui
令x = 5
spa
若是操做數是布爾類型,比較以前先將其轉換成數值,false爲0,true爲1 若是操做數是字符類型,另外一個是對象,對象先進行隱式轉換,再進行比較 若是操做數是字符類型,另外一個操做數是數值,則將字符串轉換爲數值在比較 null == undefined 爲true null與undefined之外的任何數都不想等。 NaN與任何數都不相等 若是兩個操做數都是對象,比較是否是同一個對象,若是是則返回true不然false
兩個操做數都是數值,則執行數值比較 兩個操做數都是字符串, 則比較兩個字符串對應的ascii碼 若是一個操做數是對象,將對象隱式轉換後再比較。 若是一個操做數非數值類型,則將其轉換爲數字類型再比較
令x = 6 y = 3
3d
若是第一個操做數是對象,則返回第二個操做數 若是第二個操做數是對象,則只有在第一個操做數的值爲true的狀況下才會返回該對象 若是兩個操做數都是對象,則返回第二個操做數 若是有一個操做數是null,則返回null 若是有一個操做數是NaN, 則返回NaN 若是有一個操做數是undefined,則返回undefined
第一個操做數是對象,則返回第一個操做數 第一個操做數的求值結果爲false,則返回第二個操做數 兩個操做數都是對象,則返回第一個操做數 兩個操做數都是null,則返回null 兩個操做數都是NaN,則返回NaN 兩個操做數都是undefined,則返回undefined
若是操做數是一個空字符串,返回true 若是操做數是數值0,返回true 若是操做數是null,返回true 若是操做數是NaN,返回true 若是操做數是undefined,返回true 其餘狀況返回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 的反碼減 1: 11111111 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("錯"); // "對" 複製代碼
返回變量的類型
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數據類型檢測
a instance of
查看a是不是b的實例,是則返回true,不是則返回false
原型鏈能夠被修改,因此這種方法一樣不許確,詳情查看深刻理解JS數據類型檢測
讀取對象的屬性值,點只能用在對象上面,若點前面不是對象,則先將其變爲對象,調用完以後再改回原來的類型
求表達式的值,或執行語句,而後void的值老是爲undefined。
在a標籤中return false能夠阻止默認動做,將其改成void(f())做用相同。
表達式1,表達式2,...,表達式n
忽略第一個操做數,返回第二個操做數
逗號操做符的優先級比"="低
delete
運算符用來刪除對象屬性或者數組元素,若是刪除成功或所刪除的目標不存在,delete將返回true。
不是全部的屬性均可刪除,一些內置核心和客戶端屬性是不能刪除的,經過 var 語句聲明的變量不能刪除,經過 function 語句定義的函數也是不能刪除的。
a in b
判斷操做數a是否做爲屬性名存在於對象b中,是則返回true,不是則則返回false
let obj = {
a: 1 } console.log("a" in obj); // true 複製代碼