天天看點

從頭開始學JavaScript (四)——操作符

一、一進制操作符

1、自增自減操作符:分為前置型和後置型;

前置型:++a;--a;

後置型:a++;a--;

例:

對整數而言,一進制減相當于取負數。

二、位操作符

1、按位非~ (NOT)

非,即按二進制形式将所有數字取反。

常見用法:位運算 NOT 實質上是對數字求負,然後減 1

2、按位或| (OR)

或,即按二進制形式将所有的數字與目标數字按位進行或操作。

常見用法:通常用于二進制數字的無條件指派。例如:一個數字|1,相當于與擷取與目前數字最接近的奇數。

3、按位與& (AND)

與,即按二進制形式将所有的數字與目标數字按位進行與操作。

常見用法:通常用于二進制的取位操作,例如:一個數字&1,如果結果為0則為偶數,如果為1則為奇數。

4、按位異或^ (XOR)

異或,即按二進制形式将所有數字與目标數字對比,隻有兩個數字不相同即隻有一個數位存放的是1的時候傳回1,如兩個數字相同傳回0.

常見用法:xor運算的逆運算是它本身,也就是說兩次異或同一個數最後結果不變。可以用于簡單的加密,或互動數值操作。

5、左移<<

左移,即按二進制形式把所有的數字向左移動對應的位數,高位移出(舍棄),低位的空位補零。左移不會影響符号位。

數學意義:在數字沒有溢出的前提下,對于正數和負數,左移一位都相當于乘以2的1次方,左移n位就相當于乘以2的n次方。

6、右移

6.1有符号的右移>>:即按二進制形式把所有的數值向右移動但是保留符号位。

數學意義:在數字沒有溢出的前提下,對于正數和負數,右移一位都相當于除以2的1次方,右移n位就相當于除以2的n次方。

6.2無符号的右移>>>:即按二進制形式把所有的數值,包括符号位都向右移動。

對于正數來說>>和>>>的結果是一樣的;

對負數來說,由于負數以其絕對值的補碼形式表示,是以會導緻無符号右移結果非常大。

三、布爾操作符

1、邏輯非  !

邏輯非用!表示,可以應用與ECMAScript的任何類型的值,邏輯非操作傳回的是一個布爾值(true/false)。該操作符首先會将它的操作數轉換為一個布爾值,然後再對其求反.

!!相當于Boolean()函數。

Boolean()轉型函數的一組規則。 http://www.cnblogs.com/yxField/p/4211704.html

資料類型

轉換為true的值

轉換為false的值

Boolean

true

false

String  

任何非空字元串

""(空字元串)

Number 

任何非零數字值(包括無窮大)

0和NaN

Object

任何對象

null

Undefined

 無

undefined

2、邏輯與&&

邏輯與有兩個操作數。 

邏輯與操作可以應用于任何類型的操作數,而不僅僅是布爾值。在有一個操作數不是布爾值的情況下,邏輯與操作就不一定傳回布爾值;此時,它遵循一下規則: 

1. 如果第一個操作數是對象,則傳回第二個操作數; 

2. 如果第二個操作數是對象,則隻有在第一個操作數的求值結果為true的情況下才會傳回該對象; 

3. 如果兩個操作符都是對象,則傳回第二個操作數; 遵循第一規則。 

4. 如果有一個操作數是null,則傳回null; 

5. 如果有一個操作數是NaN,則傳回NaN; 

6. 如果有一個操作數是undefined,則傳回undefined。 

邏輯與操作屬于短路操作,即如果第一操作數能夠決定結果,那麼就不會再對第二個操作數求值。(可以了解為内部的兩個return操作)。是以當4、5、6規則沖突時,遵循短路操作原則。 

3、邏輯或||

邏輯或有兩個操作數。 

邏輯或與邏輯與相似,操作可以應用于任何類型的操作數,而不僅僅是布爾值。在有一個操作數不是布爾值的情況下,邏輯或操作就不一定傳回布爾值;此時,它遵循一下規則: 

1. 如果第一個操作數是對象,則傳回第一個操作數; 

2. 如果第一個操作數的結果是false,則傳回第二個操作數; 

3. 如果兩個操作符都是對象,則傳回第一個操作數,遵循第一條規則。 

4. 如果兩個操作數都是null,則傳回null; 

5. 如果兩個操作數都是NaN,則傳回NaN; 

6. 如果兩個操作數都是undefined,則傳回undefined。 

邏輯或操作屬于短路操作,即如果第一操作數結果為true,那麼就不會再對第二個操作數求值。

我們可以利用邏輯或的這個特性來避免為變量賦null或undefined的值

例如:var myObject=firstObject||secondObject

如果firstObject不是null,則firstObject被指派給myObject,否則将secondObject的值賦給myObject.

繼續閱讀