一、一元操作符
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
