操作符
一元操作符
只能操作一個(gè)值的操作符叫做一元操作符。
有遞增(++)和遞減(--)操作符,有兩個(gè)版本:
- 前置型
- 執(zhí)行前置遞增和遞減操作時(shí),變量的值都在語(yǔ)句被求值以前改變的(這種情況被稱為副效應(yīng))
var age = 29;
var anotherAge = --age + 2;
alert(age); //輸出28
alert(anotherAge); //輸出30
由于前置遞增和遞減操作與執(zhí)行語(yǔ)句的優(yōu)先級(jí)相等,因此整個(gè)語(yǔ)句會(huì)從左至有被求值,例:
var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2; //等于21
var num4 = num1 + num2; //等于21
- 后置型
- 后置遞增遞減語(yǔ)法不變,但區(qū)別是:即遞增遞減操作是在包含它們的語(yǔ)句被求值之后才執(zhí)行的,例:
var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2; //等于22
var num4 = num1 + num2; //等于21
- 在應(yīng)用不同的值時(shí),遞增遞減遵循以下規(guī)則:
- 應(yīng)用一個(gè)包含有效數(shù)字字符的字符串時(shí),先將其轉(zhuǎn)換為數(shù)字值,再執(zhí)行加減一的操作
- 應(yīng)用一個(gè)不包含有效數(shù)字字符的字符串時(shí),將變量值設(shè)為NaN。
- 應(yīng)用一個(gè)布爾值false或者true時(shí),先將其轉(zhuǎn)換為0或者1,再執(zhí)行加減一的操作
- 應(yīng)用于浮點(diǎn)數(shù)時(shí),執(zhí)行加減一操作
- 應(yīng)用于對(duì)象,先調(diào)用對(duì)象的valueOf()方法取得一個(gè)可操作的值,然后將該值應(yīng)用前述規(guī)則,如果結(jié)果NaN,調(diào)用toString()方法
var s1 = "2"; s1++; //3
var s2 = "z"; s2++; //NaN
var b = false; b++; //1
var f = 1.1; f--; //0.1000000000009(由于浮點(diǎn)舍入錯(cuò)誤導(dǎo)致)
var o = {
valueOf: function(){
return -1;
}
}; o--; //-2
算數(shù)操作符
乘法
乘法操作符是由一個(gè)(*)表示,用于表示兩個(gè)數(shù)值的乘積處理特殊值,遵循以下規(guī)則:
- 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)乘法計(jì)算,如果乘積超過數(shù)值的表示范圍,用Infinity或-Infinity表示;
- 如果有一個(gè)操作數(shù)是NaN,結(jié)果是NaN;
- 如果Infinity與0相乘,結(jié)果NaN;
- 如果Infinity與Infinity相乘,結(jié)果是Infinity
- 如果Infinity與非0數(shù)值相乘,結(jié)果是Infinity或者-Infinity;
- 如果有一個(gè)操作符不是數(shù)值,則調(diào)用Number()將其轉(zhuǎn)換為數(shù)值。
除法
除法操作符有一個(gè)(/)表示,
例:var result = 66/11;處理特殊值,遵循以下規(guī)則:
- 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)除法計(jì)算,如果商超過數(shù)值的表示范圍,用Infinity或-Infinity表示;
- 如果有一個(gè)操作數(shù)是NaN,結(jié)果是NaN;
- 如果0被0除,結(jié)果NaN;
- 如果Infinity被Infinity除,結(jié)果是NaN
- 如果非零的有限數(shù)被零除,結(jié)果是Infinity或者-Infinity;
- 如果Infinity被任何非零數(shù)值除,結(jié)果是Infinity或者-Infinity;
- 如果有一個(gè)操作符不是數(shù)值,則調(diào)用Number()將其轉(zhuǎn)換為數(shù)值。
求模
求模(余數(shù))操作符有一個(gè)(%)表示,
例:var result = 26 % 5; //等于1,處理特殊值,遵循以下規(guī)則:
- 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)除法計(jì)算,返回除得的余數(shù);
- 如果被除數(shù)是無窮大值而除數(shù)是有限大的值,結(jié)果NaN;
- 如果被除數(shù)是有限大的數(shù)值而除數(shù)是零,結(jié)果NaN;
- 如果Infinity被Infinity除,結(jié)果是NaN;
- 如果被除數(shù)是有限大的數(shù)值而除數(shù)是無窮大的數(shù)值,則結(jié)果是被除數(shù);
- 如果被除數(shù)是零,則結(jié)果是零;
- 如果有一個(gè)操作符不是數(shù)值,則調(diào)用Number()將其轉(zhuǎn)換為數(shù)值。
加性操作符
加法操作符用(+)表示。
例: var result = 1 + 2;處理特殊值,遵循以下規(guī)則:
- 如果有一個(gè)操作數(shù)是NaN,則結(jié)果是NaN;
- 如果是Infinity加Infinity,結(jié)果是Infinity;
- 如果是-Infinity加-Infinity,結(jié)果是-Infinity;
- 如果Infinity加-Infinity,結(jié)果是NaN;
- 如果+0加+0,結(jié)果是+0;
- 如果-0加-0,結(jié)果是-0;
- 如果+0加-0,結(jié)果是+0;
- 不過如果有一個(gè)操作符是字符串,則應(yīng)用以下規(guī)則:
- 如果兩個(gè)操作數(shù)都是字符串,則拼接起來;
- 如果只有一個(gè)操作符是字符串,則將另一個(gè)操作符轉(zhuǎn)換為字符串,然后拼接
- 如果有一個(gè)操作數(shù)是對(duì)象,數(shù)值或布爾,則調(diào)用它們的
toString()方法取得相應(yīng)的字符串值,然后再應(yīng)用前面的關(guān)于字符串的規(guī)則,對(duì)于undefined和null,則調(diào)用String()函數(shù)取得字符串.
var result = 5 + 5;
alert(result); // 10
var result1 = 5 + "5";
alert(result1); // "55"
減法
減法操作符用(-)表示,
var result = 2 - 1;處理特殊值,遵循以下規(guī)則:
- 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)計(jì)算,返回結(jié)果;
- 如果有一個(gè)操作數(shù)是NaN,結(jié)果NaN;
- 如果是 Infinity 減 Infinity,結(jié)果是NaN;
- 如果是 -Infinity 減 -Infinity,結(jié)果是NaN;
- 如果是 Infinity 減 -Infinity,結(jié)果是 Infinity;
- 如果是 -Infinity 減 Infinity,結(jié)果是 -Infinity;
- 如果+0減+0,結(jié)果是+0;
- 如果-0減+0,結(jié)果是-0;
- 如果-0減-0,結(jié)果是+0;
- 如果有一個(gè)操作符不是數(shù)值,則調(diào)用Number()將其轉(zhuǎn)換為數(shù)值。在計(jì)算
var result1 = 5 - true ; // 4 ,因?yàn)閠rue轉(zhuǎn)換為1
var result2 = NaN - 1 ; // NaN
var result3 = 5 - "" ; // 5, 因?yàn)?"被轉(zhuǎn)換為0
var result4 = 5 - null ; // 5,因?yàn)閚ull轉(zhuǎn)換為0
關(guān)系操作符
關(guān)系操作符用于對(duì)兩個(gè)值得比較,返回時(shí)布爾值。包括:
小于(<)、大于(>)、大于等于(>=)、小于等于(<=)當(dāng)關(guān)系操作數(shù)使用了非數(shù)值,遵循以下規(guī)則:
- 如果兩個(gè)操作符都是字符串,則比較兩個(gè)字符轉(zhuǎn)對(duì)應(yīng)的字符編碼值;
- 如果一個(gè)操作數(shù)是數(shù)值,將另一個(gè)操作數(shù)轉(zhuǎn)換為數(shù)值,比較;
- 如果一個(gè)操作數(shù)是對(duì)象,則調(diào)用valueOf()方法,如果沒有valueOf()方法,調(diào)用toString()方法,在比較;
- 如果一個(gè)操作數(shù)是布爾,轉(zhuǎn)換為數(shù)值,在比較
相等操作符
ECMAScript提供兩組操作符:
相等 和 不相等----先轉(zhuǎn)換再比較,全等 和 不全等----僅比較而不轉(zhuǎn)換
相等和不相等
相等操作符有
==兩個(gè)等號(hào)表示,返回布爾值,不相等操作符由!=嘆號(hào)后跟等號(hào)組成,這兩個(gè)操作符先轉(zhuǎn)換再比較(強(qiáng)制轉(zhuǎn)換)轉(zhuǎn)換遵循基本原則:
- 如果有一個(gè)操作符是布爾值,比較前轉(zhuǎn)換為數(shù)值0或1
- 如果一個(gè)操作數(shù)是字符串,另一個(gè)是數(shù)值,先將字符串轉(zhuǎn)化為數(shù)值再比較
- 如果一個(gè)操作符是對(duì)象,另一個(gè)不是,則調(diào)用對(duì)象的valueOf()方法,得到的基本值用前面的規(guī)則比較;
- 兩個(gè)操作符遵循以下規(guī)則:
- null 和 undefined 是相等的
- 比較相等性之前,不能將null 和 undefined轉(zhuǎn)換任何值
- 如果有個(gè)操作數(shù)是NaN,相等操作符返回false,不相等返回true. NaN不等于NaN
- 如果兩個(gè)操作數(shù)都是對(duì)象,比較它們是不是同一個(gè)對(duì)象,如果都指向同一個(gè)對(duì)象,則相等操作符返回true;否則,返回false.
- 兩個(gè)操作符遵循以下規(guī)則:
全等和不全等
全等操作符由
===三個(gè)等于號(hào)表示,只在兩個(gè)操作數(shù)未經(jīng)轉(zhuǎn)換就相等的情況下返回true.
var result1 = ("55" == 55) ; //true
var result2 = ("55" === 55) ; //false
不全等操作符由
!==一個(gè)感嘆號(hào)后跟兩個(gè)等號(hào)表示,在兩個(gè)操作數(shù)未經(jīng)轉(zhuǎn)換就不相等的情況下返回true
var result1 = ("55" != 55) ; //false
var result2 = ("55" !== 55) ; //true
記住:null == undefined會(huì)返回true,因?yàn)樗鼈兪穷愃频闹?null === undefined會(huì)返回false,因?yàn)樗鼈儾煌愋?/strong>
布爾操作符
布爾操作符一共有三個(gè):
非(NOT) 與(AND) 或(OR).
邏輯非
邏輯非由一個(gè)感嘆號(hào)
!表示,返回布爾值,邏輯非操作先將其轉(zhuǎn)化為布爾值,然后取非對(duì)其求反.
- 如果操作數(shù)是一個(gè)對(duì)象,返回false;
- 如果操作符是一個(gè)空字符串,返回true;
- 如果操作符是一個(gè)非空字符串,返回false;
- 如果操作符是數(shù)值0 ,返回true;
- 如果操作數(shù)是任意非0數(shù)值(包括Infinity),返回false;
- 如果操作數(shù)是null,返回true;
- 如果操作數(shù)是NaN,返回true;
- 如果操作數(shù)是undefined,返回true;
alert(!false); //true
alert(!"blue"); //false
alert(!0); //true
alert(!NaN); //true
alert(!""); //true
同時(shí)使用兩個(gè)邏輯非(!!)操作,實(shí)際上會(huì)模擬Boolean()轉(zhuǎn)型函數(shù)的行為
邏輯與
邏輯與操作符由兩個(gè)和號(hào)
&&表示,有兩個(gè)操作數(shù),例:var result = true && false;
| 第一個(gè)操作數(shù) | 第二個(gè)操作數(shù) | 結(jié)果 |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
邏輯與操作可以應(yīng)用于任何類型的操作數(shù),不僅僅布爾值,其他數(shù)值類型,遵循以下規(guī)則:
- 如果第一個(gè)操作數(shù)是對(duì)象,返回第二個(gè)操作值;
- 如果第二個(gè)操作數(shù)是對(duì)象,則只有在第一個(gè)操作數(shù)的求值結(jié)果為true的情況下才會(huì)返回該對(duì)象;
- 如果兩個(gè)數(shù)都是對(duì)象,返回第二個(gè)操作數(shù);
- 如果第一個(gè)數(shù)null, 返回null;
- 如果第一個(gè)操作數(shù)是NaN,則返回NaN;
- 如果第一個(gè)操作數(shù)是undefined,則返回underfined;
邏輯與操作屬于短路操作,即如果第一個(gè)操作數(shù)能夠決定結(jié)果,不會(huì)對(duì)第二個(gè)操作數(shù)求值.
var found = true ;
var result = ( found && someUndefinedVariable ) ; //會(huì)發(fā)生錯(cuò)誤,不能使用未定義的值
alert( result ) ; //這一行不會(huì)執(zhí)行
var found = false ;
var result = ( found && someUndefinedVariable ) ; //不會(huì)發(fā)生錯(cuò)誤,短路操作
alert( result ) ; // 會(huì)執(zhí)行"false"
邏輯或
邏輯或操作符由兩個(gè)
||兩個(gè)豎線符號(hào)表示,由兩個(gè)操作符,例:var result = true || false;
| 第一個(gè)操作數(shù) | 第二個(gè)操作數(shù) | 結(jié)果 |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
與邏輯與操作相似,也遵循類似規(guī)則:
- 如果第一個(gè)操作數(shù)是對(duì)象,返回第一個(gè)操作值;
- 如果第一個(gè)操作數(shù)的求值結(jié)果為false,則返回第二個(gè)操作數(shù);
- 如果兩個(gè)數(shù)都是對(duì)象,返回第一個(gè)操作數(shù);
- 如果兩個(gè)操作數(shù)都是null, 返回null;
- 如果兩個(gè)操作數(shù)都是NaN,則返回NaN;
- 如果兩個(gè)操作數(shù)都是undefined,則返回underfined;
邏輯或操作也屬于短路操作,即如果第一個(gè)操作數(shù)為true,不會(huì)對(duì)第二個(gè)操作數(shù)求值.
var found = true ;
var result = ( found || someUndefinedVariable ) ; //不會(huì)發(fā)生錯(cuò)誤
alert( result ) ; // 會(huì)執(zhí)行"true"
var found = false ;
var result = ( found && someUndefinedVariable ) ; // 會(huì)發(fā)生錯(cuò)誤
alert( result ) ; // 不會(huì)執(zhí)行
條件操作符
語(yǔ)法:variable = boolean_expression ? true_value : false_value;
var max = ( num1 > num2 ) ? num1 :num2 ;
表達(dá)式意思是:如果num1>num2(表達(dá)式返回true),將num1賦值給max;如果false,將num2賦值給max.
賦值操作符
簡(jiǎn)單的賦值操作符由等于號(hào)
=表示,作用是把右邊的值賦給左邊的量,例:var num = 10;
- 如果等號(hào)前面再加其他操作符,可以完成復(fù)合賦值操作,例:
var num = 10;
num = num + 10; ==> num += 10;
x += y // 等同于 x = x + y
x -= y // 等同于 x = x - y
x *= y // 等同于 x = x * y
x /= y // 等同于 x = x / y
x %= y // 等同于 x = x % y
x >>= y // 等同于 x = x >> y
x <<= y // 等同于 x = x << y
x >>>= y // 等同于 x = x >>> y
x &= y // 等同于 x = x & y
x |= y // 等同于 x = x | y
x ^= y // 等同于 x = x ^ y
逗號(hào)操作符
逗號(hào)操作符可以在一條語(yǔ)句中執(zhí)行多個(gè)操作,
例:var num1 = 1, num2=2, num3=3;
- 逗號(hào)操作符多用于聲明多個(gè)變量,除此之外,還可以賦值.用于賦值時(shí),逗號(hào)操作符總會(huì)返回表達(dá)式中最后一項(xiàng)
var num = ( 5 , 1 , 4 , 8 , 0) ; //num值為0
雖然不常見,但是這個(gè)例子可以理解逗號(hào)的這種行為
對(duì)象操作符
- new
- 可以獲取一個(gè)對(duì)象示例
- delete
- 可以刪除一個(gè)對(duì)象的屬性
-
.- 獲取對(duì)象屬性
- []
- 獲取對(duì)象屬性的值
- instanceof
- 判斷某個(gè)變量是否是某個(gè)對(duì)象的實(shí)例
- in
- 判斷某個(gè)屬性是否在對(duì)象中
參考
- 相等操作符“==”詳細(xì)的類型轉(zhuǎn)換,可以參考下JavaScript中的相等性判斷
- 關(guān)于操作符的優(yōu)先級(jí),可以參考下運(yùn)算符優(yōu)先級(jí)
這些都是一些常見的操作符,好好掌握,嘿嘿,還有 位操作符 還沒太熟練,在研究一下,繼續(xù)努力