3.5 操作符
3.5.1 一元操作符 ——只能操作一個值
1、遞增和遞減
- 前置型——先+ - 再求值
-
- 前增(++a)
- 前減(--a)
var a = 29;
var b = --a + 2;
alert(a); //輸出28
alert(b); //輸出30
- 後置型——先求值再 + -
-
- 後增(a++)
- 後減(a--)
var a = 2;
var b = 21;
var c = a++ + b; //23
var d = a + b; //24
2、一元加和減操作符
——主要用於基本的算術運算,也可以用於轉換數據類型
一元操作符放在數值前面,不會對數值造成任何影響。
不過,在對非數值應用一元操作符時,該操作符會像Number( ) 轉型函數一樣對這個值進行轉換。
var s1 = "01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var o = {
valueOf: function() {
return -1;
}
};
s1 = +s1; //1
s1 = +s1; //1.1
s1 = +s1; //NaN
b = +b; //0
f = +f; //1.1
o = +o; //-1
//操作符爲 - 時,只是將得到的數值在轉換爲負數而已。
3.5.2 位操作符(對目前來,太底層,有時間再理解 )
——用於在最基本的層次上,即按內存中表示數值的位來操作數值。
- 按位非(NOT)
- 按位與(AND)
- 按位或(OR)
- 按位異或(XOR)
- 左移
- 有符號的右移
- 無符號右移
3.5.3 布爾操作符
——非(NOT) 與(AND) 或(OR)
1、邏輯非(!)
可以應用於ECMAScript
中的任何值。無論這個值是什麼數據類型,這個操作符都會返回一個布爾值。邏輯非操作符首先會將它的操作數轉換爲一個布爾值,然後再對其求反。
邏輯非操作符遵循下列規則:
alert(!false); //true
alert(!"blue"); //false
alert(!0); //true
alert(!NaN); //true
alert(!""); //true
alert(!123); //false
同時使用兩個邏輯非操作符 !!,可以模擬Boolean( ) 轉型函數的行爲。
2、邏輯與(&&)
——可以用於任何類型的操作數,不僅僅是布爾值。
邏輯與的真值表如下:
規則:
q
如果第一個操作數是對象,則返回第二個操作數;
q
如果第二個操作數是對象,則只有在第一個操作數的求值結果爲true
的情況下才會返回該對象;
q
如果兩個操作數都是對象,則返回第二個操作數;
q
如果有一個操作數是null,則返回null;
q
如果有一個操作數是NaN,則返回NaN;
q
如果有一個操作數是undefined,則返回undefined。
alert(1 && 2 && 3); //返回數值3
alert("a" && "b"); //返回"b"
//這一特點可以好好利用,用來做賦值。
&& 和 || 屬於短路操作,即如果第一個能夠決定結果,就不再對第二個操作數求值。
對於&&,第一個操作數的求值結果是false的話,直接返回false
對於||, 第一個操作數的求值結果是true的話,直接返回true
3、邏輯與(||)
邏輯或的真值表如下:
規則:
q
如果第一個操作數是對象,則返回第一個操作數;
q
如果第一個操作數的求值結果爲false,則返回第二個操作數;
q
如果兩個操作數都是對象,則返回第一個操作數;
q
如果兩個操作數都是null,則返回null;
q
如果兩個操作數都是NaN,則返回NaN;
q
如果兩個操作數都是undefined,則返回undefined。
可以利用邏輯或來賦值。例如:
var myObject = preferredObject || backupObject;
變量myObject將被賦予等號後兩個值中的一個。變量preferredObject
中包含優先賦給變量myObject
的值,變量 backupObject 負責在preferredObject
中不包含有效值的情況下提供後備值。如果preferredObject
的值不是null,那麼它的值將被賦給myObject;如果是null,則將backupObject
的值賦給myObject。
3.5.4 乘性操作符 (相應規則,暫且不表)
- 乘法(*)
- 除法(/)
- 求模(%)
3.5.5 加性操作符 (相應規則,暫且不表)
- 加法(+)(注意加法操作符的字符串拼接作用)
var num1 = 5;
var num1 = 10;
var message = "The sum of 5 and 10 is " + num1 + num2;
alert(message); //"The sum of 5 and 10 is
510"
//每個 + 是獨立的,按順序執行的
var message ="The sum of 5 and 10 is " + (num1 + num2);
alert(message); //"The sum of 5 and 10 is
15"
- 減法(-)
3.5.6 關係操作符(相應規則,暫且不表)
- 小於(<)
- 大於(>)
- 小於等於(<=)
- 大於等於(>=)
3.5.7 相等操作符 (相應規則,暫且不表)
- 相等(==) 和 不相等(!=) 先轉換再比較
特殊情況:
- 全等(===) 和 不全等(!==) 僅比較不轉換
alert("55" != 55); //false 先轉換再比較
alert("55" !== 55); //true 不轉換,數據類型不同
3.5.8 條件操作符
看例子吧:
variable = boolean_expression ? true_value : false_value;
本質上,這行代碼的含義就是基於對boolean_expression
求值的結果,決定給變量variable賦什麼值。如果求值結果爲true,則給變量variable
賦true_value
值;如果求值結果爲false,則給變量variable
賦false_value
值。
再看一個例子:
var max = (num1 > num2) ? num1 : num2;
在這個例子中,max
中將會保存一個最大的值。這個表達式的意思是:如果num1
大於num2(關系表達式返回true),則將num1
的值賦給max;如果num1
小於或等於num2(關係表達式返回false),則將num2
的值賦給max。
3.5.9 賦值操作符(=)
複合賦值操作:
- 乘/賦值(*=)
- 除/賦值(/=)
- 模/賦值(%=)
- 加/賦值(+=)
- 減/賦值(-=)
- 左移/賦值(<<=)
- 有符號右移/賦值(>>=)
- 無符號右移/賦值(>>>=)
舉個例子:
var num = 10;
var num += 10; //等同於
var num = num + 10;
3.5.10 逗號操作符
使用逗號操作符可以在一條語句中執行多個操作。
var num1=1, num2=2, num3=3;
此外,還可用於賦值。在用於賦值時,逗號操作符總會返回表達式的最後一項:
var num = (2, 5, 7, 4, 3 ); // num的值是3