本文著重給大家介紹了javascript的操作符,包含一元操作符、位操作符、布爾操作符這3種類型,講解的十分全面,小伙伴們參考下
一、一元操作符
1、自增自減操作符:分為前置型和后置型;
前置型:++a;--a;
后置型:a++;a--;
例:
代碼如下:
<script type="text/javascript">
var a, b,i= 1,j=1;
a=i++;
b=++j;
alert("a="+a+",i="+i+",b="+b+",j="+j);//a=1,i=2,b=2,j=2
</script>
其中a=i++,相當(dāng)于a=i;i=i+1;
而b=++j,相當(dāng)于j=j+1;b=j;
2、一元加減操作符:a=+i;a=-i;
代碼如下:
<script type="text/javascript">
var a, b,i= 1,j=1;
a=+i;
b=-j;
alert("a="+a+",i="+i+",b="+b+",j="+j);//a=1,i=1,b=-1,j=1
</script>
對(duì)整數(shù)而言,一元減相當(dāng)于取負(fù)數(shù)。
二、位操作符
1、按位非~ (NOT)
非,即按二進(jìn)制形式將所有數(shù)字取反。
常見用法:位運(yùn)算 NOT 實(shí)質(zhì)上是對(duì)數(shù)字求負(fù),然后減 1
2、按位或| (OR)
或,即按二進(jìn)制形式將所有的數(shù)字與目標(biāo)數(shù)字按位進(jìn)行或操作。
常見用法:通常用于二進(jìn)制數(shù)字的無條件賦值。例如:一個(gè)數(shù)字|1,相當(dāng)于與獲取與當(dāng)前數(shù)字最接近的奇數(shù)。
3、按位與& (AND)
與,即按二進(jìn)制形式將所有的數(shù)字與目標(biāo)數(shù)字按位進(jìn)行與操作。
常見用法:通常用于二進(jìn)制的取位操作,例如:一個(gè)數(shù)字&1,如果結(jié)果為0則為偶數(shù),如果為1則為奇數(shù)。
4、按位異或^ (XOR)
異或,即按二進(jìn)制形式將所有數(shù)字與目標(biāo)數(shù)字對(duì)比,只有兩個(gè)數(shù)字不相同即只有一個(gè)數(shù)位存放的是1的時(shí)候返回1,如兩個(gè)數(shù)字相同返回0.
常見用法:xor運(yùn)算的逆運(yùn)算是它本身,也就是說兩次異或同一個(gè)數(shù)最后結(jié)果不變。可以用于簡(jiǎn)單的加密,或交互數(shù)值操作。
5、左移<<
左移,即按二進(jìn)制形式把所有的數(shù)字向左移動(dòng)對(duì)應(yīng)的位數(shù),高位移出(舍棄),低位的空位補(bǔ)零。左移不會(huì)影響符號(hào)位。
數(shù)學(xué)意義:在數(shù)字沒有溢出的前提下,對(duì)于正數(shù)和負(fù)數(shù),左移一位都相當(dāng)于乘以2的1次方,左移n位就相當(dāng)于乘以2的n次方。
6、右移
6.1有符號(hào)的右移>>:即按二進(jìn)制形式把所有的數(shù)值向右移動(dòng)但是保留符號(hào)位。
數(shù)學(xué)意義:在數(shù)字沒有溢出的前提下,對(duì)于正數(shù)和負(fù)數(shù),右移一位都相當(dāng)于除以2的1次方,右移n位就相當(dāng)于除以2的n次方。
6.2無符號(hào)的右移>>>:即按二進(jìn)制形式把所有的數(shù)值,包括符號(hào)位都向右移動(dòng)。
對(duì)于正數(shù)來說>>和>>>的結(jié)果是一樣的;
對(duì)負(fù)數(shù)來說,由于負(fù)數(shù)以其絕對(duì)值的補(bǔ)碼形式表示,因此會(huì)導(dǎo)致無符號(hào)右移結(jié)果非常大。
三、布爾操作符
1、邏輯非 !
邏輯非用!表示,可以應(yīng)用與ECMAScript的任何類型的值,邏輯非操作返回的是一個(gè)布爾值(true/false)。該操作符首先會(huì)將它的操作數(shù)轉(zhuǎn)換為一個(gè)布爾值,然后再對(duì)其求反.
??!相當(dāng)于Boolean()函數(shù)。
Boolean()轉(zhuǎn)型函數(shù)的一組規(guī)則。
數(shù)據(jù)類型 轉(zhuǎn)換為true的值 轉(zhuǎn)換為false的值
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 任何非零數(shù)字值(包括無窮大) 0和NaN
Object 任何對(duì)象 null
Undefined 無 undefined
2、邏輯與&&
邏輯與有兩個(gè)操作數(shù)。
邏輯與操作可以應(yīng)用于任何類型的操作數(shù),而不僅僅是布爾值。在有一個(gè)操作數(shù)不是布爾值的情況下,邏輯與操作就不一定返回布爾值;此時(shí),它遵循一下規(guī)則:
1. 如果第一個(gè)操作數(shù)是對(duì)象,則返回第二個(gè)操作數(shù);
2. 如果第二個(gè)操作數(shù)是對(duì)象,則只有在第一個(gè)操作數(shù)的求值結(jié)果為true的情況下才會(huì)返回該對(duì)象;
3. 如果兩個(gè)操作符都是對(duì)象,則返回第二個(gè)操作數(shù); 遵循第一規(guī)則。
4. 如果有一個(gè)操作數(shù)是null,則返回null;
5. 如果有一個(gè)操作數(shù)是NaN,則返回NaN;
6. 如果有一個(gè)操作數(shù)是undefined,則返回undefined。
邏輯與操作屬于短路操作,即如果第一操作數(shù)能夠決定結(jié)果,那么就不會(huì)再對(duì)第二個(gè)操作數(shù)求值。(可以理解為內(nèi)部的兩個(gè)return操作)。因此當(dāng)4、5、6規(guī)則沖突時(shí),遵循短路操作原則。
代碼如下:
var nul = null;
var na = NaN;
var test;
test = na&&nul;
document.write(test); //NaN
代碼如下:
var nul = null;
var na = NaN;
var test;
test = nul&&na;
document.write(test); //null
3、邏輯或||
邏輯或有兩個(gè)操作數(shù)。
邏輯或與邏輯與相似,操作可以應(yīng)用于任何類型的操作數(shù),而不僅僅是布爾值。在有一個(gè)操作數(shù)不是布爾值的情況下,邏輯或操作就不一定返回布爾值;此時(shí),它遵循一下規(guī)則:
1. 如果第一個(gè)操作數(shù)是對(duì)象,則返回第一個(gè)操作數(shù);
2. 如果第一個(gè)操作數(shù)的結(jié)果是false,則返回第二個(gè)操作數(shù);
3. 如果兩個(gè)操作符都是對(duì)象,則返回第一個(gè)操作數(shù),遵循第一條規(guī)則。
4. 如果兩個(gè)操作數(shù)都是null,則返回null;
5. 如果兩個(gè)操作數(shù)都是NaN,則返回NaN;
6. 如果兩個(gè)操作數(shù)都是undefined,則返回undefined。
邏輯或操作屬于短路操作,即如果第一操作數(shù)結(jié)果為true,那么就不會(huì)再對(duì)第二個(gè)操作數(shù)求值。
我們可以利用邏輯或的這個(gè)特性來避免為變量賦null或undefined的值
例如:var myObject=firstObject||secondObject
如果firstObject不是null,則firstObject被賦值給myObject,否則將secondObject的值賦給myObject.
以上內(nèi)容就是本文的全部了,希望對(duì)大家能有所幫助
更多信息請(qǐng)查看IT技術(shù)專欄