一元操做符javascript
一元操做符在處理全部的非數值時,至關於將該值通過Number()轉換成數值,如 +"12" 將把 "12" 字符串轉換爲數字。java
位操做符函數
-
- 負數在計算機上以二進制補碼的形式儲存,補碼等於原碼的反碼加1,ECMAScript在以二進制字符串形式輸出一個負數時,咱們看到的只是這個負數絕對值的二進制碼前面加上一個符號(而不是輸出32位二進制)如:
var num = -18;
alert(num.toString(2)); // "-10010"
- 對特殊的NaN和Infinity值應用位操做符時,這兩個值都會被當成0來處理。
- 進行有符號的右移(>>)操做時,其左邊以符號位的值來填充空位,進行無符號的右移(>>>)操做時,以0來填充空位.
布爾操做符編碼
邏輯非spa
對非布爾類型的值進行邏輯非操做時,會先使用Boolean()將值轉換爲布爾類型。對象
邏輯與blog
-
- 屬於短路操做,且並不必定返回布爾類型。
- 若是第一個操做數用Boolean()函數能夠轉換爲true時,返回第二個操做數。
- 若是第一個操做數是false,null,NaN,undefined時,返回第一個操做數。
邏輯或ip
-
- 原理跟邏輯與差很少。
- 咱們能夠利用下面的例子來避免爲變量賦null或undefined值,如:
var myObject = preferredObject || backupObject
其中若第一個變量存在則優先賦予myObject第一個變量,否則賦予第二個變量字符串
乘性操做符it
注:若是參與乘性計算的某個操做符不是數值時,後臺會先使用Number()轉型函數將其轉換爲數值。
乘法
-
- 若是有一個操做數是NaN,則結果是NaN;
- 若是是Infinity與0相乘,則結果是NaN;
- 若是Infinity與非0數值相乘,則結果是Infinity或-Infinity;
- 若是是Infinity與Infinity相乘,則結果是Infinity。
除法
-
- 若是有一個操做數是NaN,則結果是NaN;
- 若是是Infinity被Infinity除,則結果是NaN;
- 若是是零被零除,則結果是NaN;
- 若是是非零的有限數被零除,則結果是Infinity或-Infinity;
- 若是是Infinity被任何非零數值除,則結果是Infinity或-Infinity。
求模
-
- 若是被除數是無窮大值而除數是有限大值,則結果是NaN;
- 若是被除數是有限大的數值而除數是零,則結果是NaN;
- 若是是Infinity被Infinity除,則結果是NaN;
- 若是被除數是有限大的數值而除數是無窮大的數值,則結果是被除數;
- 若是被除數是0,則結果是0。
加性操做符
加法
若是有一個操做數是字符串,則將另外一個操做數使用String()轉型函數轉換爲字符串,而後將兩個字符串拼接起來;
減法
若是操做數是非數值,後臺調用Number()轉型函數先將其轉換爲數值在進行運算。
關係操做符
- 若是兩個操做數是數值,則執行數值比較;
- 若是兩個操做數都是字符串,則比較兩個字符串對應的字符編碼值;
- 若是一個操做數是數值,則後臺將使用Number()函數將其轉換爲數值再比較;
- 若是一個操做數是對象,則調用對象的valueOf()方法,用獲得的結果按照前面的規則進行比較,若是對象沒有valueOf方法,則調用toString()方法,並用獲得的結果進行比較。
- NaN做爲操做數時,NaN < 3 和 NaN >= 3 皆返回false。
相等操做符
注:相等和不相等---先轉換再比較,全等和不全等---僅比較而不轉換
相等和不相等
-
- null和undefined是相等的;
- 若是隻有一個操做數是數值,則將另外一個操做數轉換爲數值再比較(偏向於比較數字);
- 若是兩個操做數都是對象,則比較它們是否是同一個對象。若是兩個操做數都指向同一個對象,則相等操做符返回true。
條件操做符
以下所示:error這個變量未定義,可是並未拋出錯誤。
in運算符
in運算符但願它的左操做數是一個字符串或能夠轉換爲字符串,但願他的右操做數是一個對象,若是右側的對象擁有一個名爲左操做數值的屬性名,那麼表達式返回true。
instanceof運算符
instanceof運算符但願左操做數是一個對象,右操做數標識對象的類。若是左側的對象是右側類的實例,則表達式返回true。全部的對象都是Object的實例。若是instanceof的左操做數不是對象的話,instanceof返回false,若是右操做數不是函數,則拋出一個類型錯誤異常。