JS 操作符


一、一元操作符

1.遞增和遞減操作符

前置型    ++i    --i

后置型    i++    i--

執行前置遞增和遞減操作時,變量的值都是在語句被求值之前改變的。

示例1:

var a = 10;

var b = 20;

var c = ++a + b;    

var d = a + b;    

console.log(c);    //31

console.log(d);    //31

示例2:

var a = 10;

var b = 20;

var c = a++ + b;

var d = a + b;

console.log(c);    //30

console.log(d);    //31

示例3:

var a = 1;

var b = ++a +a;

var c = a++ +a;

console.log(b);    //4

console.log(c);    //5

 

數值、字符串、布爾值、對象都能使用遞增和遞減操作符;如果不是數值數據,則調用轉型函數Number()轉換為數值,再進行相應的操作。

 

2.一元加和減操作符

一元加和減操作符,主要用於基本的算術運算,也可以用於轉換數據類型。

 一元加操作符,放在數值前面,對數值不會產生任何影響;但是放在非數值前面,則會調用Number()函數,對該非數值的值進行轉換。

一元減操作符,用於表示負數;應用於非數值時,先調用Number()函數,再將得到的結果轉換為負數。

 

二、位操作符    ——    好高大上的感覺,先行跳過,有待補充

 

三、布爾操作符

1.邏輯非(!)

邏輯非操作符可用於JS中的任何值,首先將它的操作數轉換為布爾值,然后對其取反。

規則如下:

如果操作數是一個對象,轉換為布爾值為true,取反,為false;

如果操作數是null,轉換為布爾值為false,取反,為true;

空字符串,false,取反,為true;

非空字符串,true,取反,為false;

數值0/NaN,為false,取反,為true;

非0數值(Infinite),為true,取反,為false;

undefined,為false,取反,為true。

同時使用兩個邏輯非操作符(!!)可將一個值轉換為其對應的布爾值,其結果與調用Boolean()函數一致。

 

2.邏輯與(&&)

邏輯與操作屬於短路操作,如果第一個操作數是false,則結果直接為false;如果第一個操作數為true,則結果為第二個操作數。

在有一個(或兩個)操作數不是布爾值的情況下,把操作數轉換為布爾值進行邏輯與操作,但是返回結果為原值。

示例1:

var a = 0;

var b = "string";

console.log(a&&b);    //0

console.log(b&&a);    //0

注意:在邏輯與操作中使用未定義的值可能會導致錯誤。

var x = 5;

alert(x&&y);    //ReferenceError: y is not defined

 

3.邏輯或(||)

邏輯或也是短路操作,如果第一個值為true,則直接返回true,無需對第二個操作數求值;如果第一個操作數為false,則返回第二個操作數;即使第二個操作數也是false,也是返回第二個操作數。

在有一個(或兩個)操作數不是布爾值的情況下,把操作數轉換為布爾值進行邏輯或操作,但是返回結果為原值。

var x = 0;

var y = null;

console.log(x||y);    //null

注意:在邏輯或操作中使用未定義的值可能會導致錯誤。

利用邏輯或,避免為變量賦null或undefined值:

var myObject = preferredObject || backupObject;

 

四、乘性操作符

1.乘法(*)

如果操作數都是數值,執行常規乘法計算;

如果有一個數是NaN,結構為NaN;

如果Infinite與0相乘,結果為NaN;

如果Infinite與非0數值相乘,結果為Infinite;

如果Infinite與Infinite相乘,結果為Infinite;

如果有一個操作數不是數值,則調用Number()函數,將其轉換為數值,再應用上述規則。

 

2.除法(/)

如果操作數都是數值,執行常規除法計算;

如果有一個數是NaN,結果為NaN;

Infinite除以Infinite,結果為NaN;

Infinite除以非0數值,結果為Infinite;

Infinite除以0,結果為Infinite;

0除以0,結果為NaN;

非0有窮數除以0,結果為Infinite;

如果有一個操作數不是數值,則調用Number()函數,將其轉換為數值,再應用上述規則。

 

3.求模(%)

如果操作數都是數值,執行常規除法計算,返回所得的余數;

如果有一個數是NaN,結果為NaN;

如果Infinite除以Infinite,結果為NaN;

如果Infinite除以有窮數,結果為NaN;

如果有窮數除以0,結果為NaN;

如果被除數有窮除以Infinite,結果為被除數。

0除以任何數,結果為0;

如果有一個操作數不是數值,則調用Number()函數,將其轉換為數值,再應用上述規則。

 

五、加性操作符

1.加法

如果有一個數是NaN,結果為NaN;

如果是Infinite加Infinite,結果為Infinite;

如果是-Infinite加-Infinite,結果為-Infinite;

如果是Infinite加-Infinite,結果為NaN;

如果是+0加+0,結果為+0;

如果是-0加-0,結果為-0;

如果是+0加-0,結果為+0;

如果兩個操作數都是字符串,則將兩個字符串拼接起來;

如果只有一個操作數是字符串,則將另一個操作數轉換為字符串,然后將兩個字符串拼接起來。

如果有一個操作數是對象、數值或布爾值,則調用它們的toString()方法取得相應的字符串值;

對於undefined和null,則調用String()函數並取得相應的字符串“undefined”和“null”。

var a = 5;

var b = 10;

var message = "The sum of a and b is" + a + b;    //結果為510

var message = "The sum of a and b is" + (a + b);    //結果為15

 

2.減法

如果有一個數是NaN,結果為NaN;

如果是Infinite減Infinite,結果為NaN;

如果是-Infinite減-Infinite,結果為NaN;

如果是Infinite減-Infinite,結果為Infinite;

如果是-Infinite減Infinite,結果為-Infinite;

如果是+0減+0,結果為+0;

如果是-0減-0,結果為+0;

如果是+0減-0,結果為-0;

如果有一個操作數是字符串、布爾值、null或undefined,則先調用Number()函數;

如果有一個操作數是對象,則先調用valueOf()方法,如果得到的值是NaN,則減法的結果就是NaN;如果沒有valueOf()方法,則調用其toString()方法。

 

六、關系操作符

小於(<)、小於等於(<=)、大於(>)、大於等於(>=)

如果兩個操作數都是數值,則執行數值比較;

如果兩個操作數都是字符串,則比較兩個字符串對應的字符編碼值;

如果一個操作數是數值,則將另一個操作數轉換為數值;

如果一個操作數是對象,則調用這個對象的valueOf()方法;如果對象沒有valueOf()方法,則調用toString()方法。

如果一個操作數是布爾值,則將其轉換為數值;

任何操作數與NaN進行比較,結果都會返回false。

 

七、相等操作符

1.相等(==)與不相等(!=)

先轉換操作數,再比較相等性;基本規則:

如果有一個操作數是布爾值,在比較之前先轉換為數值;

如果有一個操作數是字符串,另一個操作數是數值,在比較之前先將字符串轉換為數值;

如果有一個操作數是對象,另一個不是,則調用對象的valueOf()方法;

如果兩個操作數都是對象,則比較它們是不是同一個對象;如果兩個操作數都指向同一個對象,則返回true,否則返回false;

null值與undefined值相等;

在比較相等性之前,不能將null值或undefined轉換成其它任何值;

NaN不等於任何值,即使是它自己。

 

2.全等(===)和不全等(!===)

只有在不轉換數值類型的情況下相等,全等才會返回true;

null == undefined;但是null !== undefined

 

八、條件操作符

variable = boolean_expression ? true_value : false_value;

對布爾值表達式求值,若為true,則返回第一個值;若為false,則返回第二個值。

 

九、賦值操作符

賦值操作符的作用,將右邊的值賦給左邊的變量。

如果在賦值操作符的左邊添加其它操作符,可以完成復合賦值操作,簡化賦值操作;

var num = 10;

num +=10 ;    //num = num +10;

 

十、逗號操作符

在一條語句中聲明多個變量;

用於賦值,表達式中的每一項都會被計算,但是返回最后一項;

var num = (1,2,3,4,5);

alert(num);    //5


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM