javascript
JS基本概念(3)
【5】操作符
(1)一元操作符:只能操作一個(gè)值的操作符
- 遞增、遞減操作符
 
    ++a ? ?--a ? ?前置
    a++ ? ?a-- ? ?后置
(這四個(gè)操作符對(duì)任何值都適用,不能轉(zhuǎn)換成數(shù)字的轉(zhuǎn)換為NaN)
- 一元加、一元減操作符(表示正、負(fù))
 
(2)位操作符:按內(nèi)存中表示數(shù)值的位來(lái)操作數(shù)值
- ECMAScript中所有數(shù)值都以IEEE-754 64位格式存儲(chǔ),但位操作符并不直接操作64位的值,而是先將64位轉(zhuǎn)化為32位的整數(shù),然后執(zhí)行操作,最后再將結(jié)果轉(zhuǎn)化為64位。
 - 對(duì)于有符號(hào)的整數(shù),32位中的前31位用于表示整數(shù)的值。第32位用于表示數(shù)值的符號(hào)(符號(hào)位):0表示正數(shù),1表示負(fù)數(shù)。
 - 符號(hào)位的值決定了其他位數(shù)值的格式:
 
     正數(shù):以純二進(jìn)制存儲(chǔ)
     負(fù)數(shù):二進(jìn)制補(bǔ)碼
       步驟:1》求這個(gè)數(shù)值絕對(duì)值的二進(jìn)制碼;
          2》求二進(jìn)制的反碼,即將0替換為1,將1替換為0;
          3》得到的二進(jìn)制反碼加1。
- 在對(duì)特殊的NaN和Infinity值應(yīng)用位操作時(shí),這兩個(gè)值都會(huì)被當(dāng)成0來(lái)處理。
 - 對(duì)非數(shù)值應(yīng)用位操作符,會(huì)先使用Number()函數(shù)進(jìn)行轉(zhuǎn)換。
 
   1》按位非(~):執(zhí)行按位非的結(jié)果就是返回?cái)?shù)值的反碼
   2》按位與(&):按位與操作只在兩數(shù)值的對(duì)應(yīng)位都是1才返回1,任何一位是0,結(jié)果都是0
   3》按位或(|):按位或操作只在兩數(shù)值的對(duì)應(yīng)位都是0才返回0,任何一位是1,結(jié)果都是1
   4》按位異或(^):按位異或操作在兩數(shù)值的對(duì)應(yīng)位都是1或0返回0,只有一位是1,才返回1
   5》左移(<<)::左移操作符會(huì)將數(shù)值的所有位向左移動(dòng)指定的位數(shù),向左移位后,原數(shù)值的右側(cè)多出來(lái)的空位會(huì)以0來(lái)填充;左移不會(huì)影響操作數(shù)的符號(hào)位
   6》有符號(hào)的右移(>>):會(huì)將數(shù)值向右移動(dòng),但保留符號(hào)位,向右移位后,原數(shù)值的左側(cè)多出來(lái)的空位會(huì)以符號(hào)位的值來(lái)填充   7》無(wú)符號(hào)的右移(>>>):對(duì)正數(shù),有符號(hào)右移和無(wú)符號(hào)右移結(jié)果相同,對(duì)于負(fù)數(shù),無(wú)符號(hào)右移以0來(lái)填充空位,并且會(huì)把負(fù)數(shù)的二進(jìn)制碼當(dāng)成正數(shù)的二進(jìn)制碼
(3)布爾操作符
1》邏輯非(!)
- !對(duì)象 //false
 - !空字符串 //true
 - !非空字符串 //false
 - !數(shù)值0 //true
 - !任意非0數(shù)值(包括Infinity) //false
 - !null //true
 - !NaN //true
 - !undefined //true
 
 使用兩個(gè)邏輯非操作符模擬Boolean()轉(zhuǎn)型函數(shù)的行為。
 2》邏輯與(&&)
 邏輯與操作可以應(yīng)用于任何類型的操作數(shù),而不僅僅是布爾值。在有一個(gè)操作數(shù)不是布爾值的情況下,邏輯與操作就不一定返回布爾值:
- 如果第一個(gè)操作數(shù)是對(duì)象,則返回第二個(gè)操作數(shù);
 - 如果第二個(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,則返回undefined;
 
 邏輯與操作是短路操作,即如果第一個(gè)操作數(shù)能夠決定結(jié)果,那么就不會(huì)再對(duì)第二個(gè)操作數(shù)求值(第一個(gè)操作數(shù)是false)。
 3》邏輯或(||)
 邏輯或操作可以應(yīng)用于任何類型的操作數(shù),而不僅僅是布爾值。在有一個(gè)操作數(shù)不是布爾值的情況下,邏輯或操作就不一定返回布爾值:
- 如果第一個(gè)操作數(shù)是對(duì)象,則返回第一個(gè)操作數(shù);
 - 如果第一個(gè)操作數(shù)的求值結(jié)果為false,則返回第二個(gè)對(duì)象;
 - 如果兩個(gè)操作數(shù)都是對(duì)象,則返回第一個(gè)操作數(shù);
 - 如果兩個(gè)操作數(shù)都是null,則返回null;
 - 如果兩個(gè)操作數(shù)都是NaN,則返回NaN;
 - 如果兩個(gè)操作數(shù)都是undefined,則返回undefined;
 
邏輯或操作也是短路操作,即如果第一個(gè)操作數(shù)能夠決定結(jié)果,那么就不會(huì)再對(duì)第二個(gè)操作數(shù)求值(第一個(gè)操作數(shù)是true)。
(4)乘性操作符
1》乘法(*)
- 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)的乘法計(jì)算,即兩個(gè)正數(shù)或兩個(gè)負(fù)數(shù)相乘的結(jié)果還是正數(shù),而如果只有一個(gè)操作數(shù)有符號(hào),那么結(jié)果就是負(fù)數(shù)。如果乘積超出了ECMAScript數(shù)值的表示范圍,則返回Infinity或-Infinity;
 - 如果有一個(gè)操作數(shù)是NaN,則結(jié)果是NaN;
 - 如果是Infinity與0相乘,則結(jié)果是NaN;
 - 如果是Infinity與非0數(shù)值相乘,則結(jié)果是Infinity或-Infinity,取決于有符號(hào)操作數(shù)的符號(hào);
 - 如果是Infinity與Infinity相乘,則結(jié)果是Infinity;
 - 如果有一個(gè)數(shù)不是數(shù)值,則在后臺(tái)調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,然后再應(yīng)用上面的規(guī)則。
 
2》除法(/)
- 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)的除法計(jì)算,即兩個(gè)正數(shù)或兩個(gè)負(fù)數(shù)相除的結(jié)果還是正數(shù),而如果只有一個(gè)操作數(shù)有符號(hào),那么結(jié)果就是負(fù)數(shù)。如果商超出了ECMAScript數(shù)值的表示范圍,則返回Infinity或-Infinity;
 - 如果有一個(gè)操作數(shù)是NaN,則結(jié)果是NaN;
 - 如果是0被0除,則結(jié)果是NaN;
 - 如果是非0的有限數(shù)被0除,則結(jié)果是Infinity或-Infinity,取決于有符號(hào)操作數(shù)的符號(hào);
 - 如果是Infinity被Infinity除,則結(jié)果是NaN;
 - 如果是Infinity被任何非0數(shù)值除,則結(jié)果是Infinity或-Infinity,取決于有符號(hào)操作數(shù)的符號(hào);
 - 如果有一個(gè)數(shù)不是數(shù)值,則在后臺(tái)調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,然后再應(yīng)用上面的規(guī)則。
 
3》求模、余數(shù)(%)
- 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)的除法計(jì)算,返回除得的余數(shù);
 - 如果被除數(shù)是無(wú)窮大值而除數(shù)是有限大的數(shù)值,則結(jié)果是NaN;
 - 如果被除數(shù)是有限大的數(shù)值而除數(shù)是0,則結(jié)果是NaN;
 - 如果是Infinity被Infinity除,則結(jié)果是NaN;
 - 如果被除數(shù)是有限大的數(shù)值而除數(shù)是無(wú)窮大的數(shù)值,則結(jié)果是被除數(shù);
 - 如果被除數(shù)是0,則結(jié)果是0;
 - 如果有一個(gè)數(shù)不是數(shù)值,則在后臺(tái)調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,然后再應(yīng)用上面的規(guī)則。
 
(5)加性操作符
1》加法(+)
- 如果兩個(gè)操作符都是數(shù)值,執(zhí)行常規(guī)的加法計(jì)算,然后根據(jù)下列規(guī)則返回結(jié)果:
 - 如果有一個(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è)操作數(shù)與第一個(gè)操作數(shù)拼接起來(lái);
 - 如果只有一個(gè)操作數(shù)是字符串,則將另一個(gè)操作數(shù)轉(zhuǎn)換為字符串,然后再將兩個(gè)字符串拼接起來(lái)。
 - 如果有一個(gè)操作數(shù)是對(duì)象、數(shù)值或布爾值,則調(diào)用它們的toString()方法取得相應(yīng)的字符串值,然后再應(yīng)用字符串的規(guī)則。對(duì)于null和undefined,則分別調(diào)用String()函數(shù)并取得字符串"null"和"undefined"。
 
2》減法(-)
- 如果兩個(gè)操作符都是數(shù)值,執(zhí)行常規(guī)的算數(shù)減法操作并返回結(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è)操作符是字符、布爾值、null或undefined。則在后臺(tái)調(diào)用Number()函數(shù)將其轉(zhuǎn)換為數(shù)值,然后再根據(jù)前面的規(guī)則執(zhí)行減法計(jì)算。如果轉(zhuǎn)換的結(jié)果是NaN,則減法的結(jié)果就是NaN;
 - 如果有一個(gè)操作數(shù)是對(duì)象,則調(diào)用對(duì)象的valueOf()方法取得表示該對(duì)象的數(shù)值。如果得到的值是NaN,則減法的結(jié)果就是NaN。如果對(duì)象沒(méi)有valueOf()方法,則調(diào)用toString()方法并將得到的字符串轉(zhuǎn)化為數(shù)值。
 
(6)關(guān)系操作符
小于(<)、大于(>)、小于等于(<=)、大于等于(>=) 這幾個(gè)操作符都返回一個(gè)布爾值
- 如果兩個(gè)操作數(shù)都是數(shù)值,則執(zhí)行數(shù)值比較。
 - 如果兩個(gè)操作數(shù)都是字符串,則比較兩個(gè)字符串對(duì)應(yīng)的字符編碼值。
 - 如果一個(gè)操作數(shù)是數(shù)值,則將另一個(gè)操作數(shù)轉(zhuǎn)化為一個(gè)數(shù)值,然后執(zhí)行數(shù)值比較。
 - 如果一個(gè)操作數(shù)是對(duì)象,則調(diào)用這個(gè)對(duì)象的valueOf()方法,并用得到的結(jié)果根據(jù)前面的規(guī)則執(zhí)行比較。如果對(duì)象沒(méi)有valueOf()方法,則調(diào)用toString()方法,并用得到的結(jié)果根據(jù)前面的規(guī)則執(zhí)行比較。
 - 如果一個(gè)操作數(shù)是布爾值,則先將其轉(zhuǎn)換為數(shù)值,然后再執(zhí)行比較。
 - 任何操作數(shù)與NaN進(jìn)行關(guān)系比較,結(jié)果都是false。
 
(7)相等操作符
 1》相等和不相等(==和!=)——先轉(zhuǎn)換再比較
 先轉(zhuǎn)換操作數(shù)再比較相等性,在轉(zhuǎn)換不同的數(shù)據(jù)類型時(shí),相等和不相等遵循以下規(guī)則:
- 如果有一個(gè)操作數(shù)是布爾值,則在比較相等性前先將其轉(zhuǎn)換為數(shù)值---false轉(zhuǎn)換為0,true轉(zhuǎn)換為1;
 - 如果一個(gè)操作數(shù)是字符串,另一個(gè)操作數(shù)是數(shù)值,則在比較相等性前將字符串轉(zhuǎn)換為數(shù)值;
 - 如果一個(gè)操作數(shù)是對(duì)象,另一個(gè)不是,則調(diào)用對(duì)象的valueOf()方法,用得到的基本類型值按照前面的規(guī)則比較;
 - null和undefined是相等的;
 - 在比較相等性之前,不能將null和undefined轉(zhuǎn)換為其他任何值;
 - 如果有一個(gè)操作符是NaN,則相等操作符返回false,不相等操作符返回true;即使兩個(gè)操作數(shù)都是NaN,也一樣,因?yàn)榘凑找?guī)則,NaN不等于NaN;
 - 如果兩個(gè)操作數(shù)都是對(duì)象,則比較它們是不是同一個(gè)對(duì)象。如果兩個(gè)操作數(shù)都指向同一個(gè)對(duì)象,則相等操作符返回true;否則,返回false;
 
| 表達(dá)式 | 值 | 
| null == undefined | true | 
| "NaN" == NaN | false | 
| 5 == NaN | false | 
| NaN == NaN | false | 
| NaN != NaN | true | 
| 5 =="5" | true | 
| false == 0 | true | 
| true == 1 | true | 
| true == 2 | flase | 
| undefined == 0 | false | 
| null == 0 | false | 
?
?
?
?
?
?
?
?
?
?
?
 2》全等和不全等()——僅比較而不轉(zhuǎn)換
 兩個(gè)操作數(shù)在未經(jīng)轉(zhuǎn)換的情況下相等返回true,不相等返回false;
(8)條件操作符
variable = boolean_expression ? true_value : false_value ;
(9)賦值操作符
 簡(jiǎn)單賦值(=)將右側(cè)的值賦給左側(cè)的變量
 乘/賦值(*=)
 除/賦值(/=)
 模/賦值(%=)
 加/賦值(+=)
 減/賦值(-=)
 左移/賦值(<<=)
 有符號(hào)右移/賦值(>>=)
 無(wú)符號(hào)右移/賦值(>>>=)
(10)逗號(hào)操作符
逗號(hào)操作符多用于聲明多個(gè)變量;
var num1 = 0 , num2 = 1 , num3 = 2 ;除此之外,逗號(hào)操作符還可用于賦值,逗號(hào)操作符總會(huì)返回表達(dá)式中最后一項(xiàng)。
var num = {1,2,3,4,5}; //num值為5?
轉(zhuǎn)載于:https://www.cnblogs.com/LS-tuotuo/p/5878189.html
總結(jié)
                            
                        - 上一篇: WebAPI 2参数绑定方法
 - 下一篇: css样式中如何设置中文字体?