<h2>一元操作符</h2>
<p>只能操作一個(gè)值得的操作符叫做一元操作符</p>
<h4>1.遞增和遞減操作符</h4>
遞增和遞減操作符借鑒于c,具有前置型和后置型,即a++,++a,a--,--a;計(jì)算方式和c語(yǔ)言類似,并且這四個(gè)操作符對(duì)任何值都適用(整數(shù),字符串,布爾值,浮點(diǎn)數(shù)值和對(duì)象);在應(yīng)用不同的值時(shí),遞增和遞減遵循下列規(guī)則:</br>
1.在用于一個(gè)包含有效數(shù)字字符的字符串時(shí),先將其轉(zhuǎn)換為數(shù)字值,再執(zhí)行加減1的操作。字符串變量變成數(shù)值變量;
例:
var s="2";
s++ ; //值為3
2.在應(yīng)用于一個(gè)不包含有效數(shù)字字符的字符串時(shí),將變量的值設(shè)為NaN,字符串變量變成數(shù)值變量;
例:
var s="z";
s++; //值為NaN
3.在應(yīng)用于布爾值false時(shí),先將其轉(zhuǎn)換為數(shù)值0再進(jìn)行計(jì)算,同理,對(duì)于true一樣;
例:
var s= false;
s++; //值為1
4.在運(yùn)用浮點(diǎn)數(shù)值時(shí),直接進(jìn)行加減1的操作;但是會(huì)由于浮點(diǎn)舍入出現(xiàn)錯(cuò)誤;
例:
var s=1.1;
s-- ; //值為0.10000000000000009
5.在應(yīng)用于對(duì)象時(shí),先調(diào)用對(duì)象的valueOf()方法來(lái)獲得一個(gè)可操作的值,然后再進(jìn)行前面的計(jì)算,若結(jié)果是NaN,則在調(diào)用toString()方法后再應(yīng)用前述規(guī)則,使對(duì)象變量變成數(shù)值變量;</br>
<h4>2.一元加和減操作符</h4>
一元加和減操作符主要用于算數(shù)的基本運(yùn)算,當(dāng)非數(shù)值應(yīng)用于一元操作符時(shí),轉(zhuǎn)換規(guī)則和Number()方式相同;同時(shí)一元減操作符主要用于表示負(fù)數(shù),當(dāng)用于數(shù)值時(shí),該值會(huì)變成負(fù)數(shù),當(dāng)用于非數(shù)值時(shí),運(yùn)用和加相同的規(guī)則,最后將得到的數(shù)值轉(zhuǎn)換為負(fù)數(shù);
例:
var s="01";
s=-s; //結(jié)果為-1
<h5>注意:</h5>同時(shí)也可以運(yùn)用到字符串當(dāng)中:
1.可以將多個(gè)字符串變量連起來(lái);
例:
txt1="What a very";
txt2="nice day";
txt3=txt1+" "+txt2; //What a very nice day
2.若為字符串和數(shù)字相加時(shí),則直接相加;
例:
var x=5+5; //10
var y="5"+5; //55
var z="Hello"+5; //hello5</br>
<h4>布爾操作符</h4>
<h5>1.邏輯非NOT</h5>
邏輯非用!來(lái)表示,可以運(yùn)用任何值,不管這個(gè)值是什么類型,這個(gè)操作符都會(huì)返回一個(gè)布爾值;下面有兩種方法運(yùn)算邏輯非:
<h6>a.首先將它的操作數(shù)轉(zhuǎn)換為一個(gè)布爾值,然后對(duì)其求反,規(guī)則如下:</h6>
1.如果操作數(shù)是一個(gè)空的字符串,返回true;
2.如果操作數(shù)是0;返回true;
3.如果操作數(shù)是null,返回true;
4.如果操作數(shù)是NaN,返回true;
5.如果操作數(shù)是undefined,返回true;
6.如果操作數(shù)是一個(gè)對(duì)象,返回false;
7.如果操作數(shù)是一個(gè)非空字符串,返回false;
8.如果操作數(shù)是任意非0數(shù)值(包括infinity),則返回false;
例:
alert(!0); //true;
alert(!NaN); //true
alert(!" "); //true
alerrt(!123456); //false</br>
<h6>b.利用Boolean函數(shù),可以同時(shí)使用兩個(gè)邏輯非進(jìn)行操作;第一個(gè)邏輯非會(huì)基于無(wú)論什么操作數(shù)返回一個(gè)布爾值,第二個(gè)對(duì)返回的這個(gè)布爾值進(jìn)行求反</h6>
例:
alert(!!NaN); //false
alert(!!" "); //false
alert(!!123456); //true</br>
<h5>2.邏輯與AND</h5>
邏輯與操作符用&&表示,是一個(gè)短路操作符(即如果第一個(gè)操作數(shù)能決定結(jié)果,那么就不會(huì)再對(duì)第二個(gè)操作數(shù)求值),該操作符可以運(yùn)用任何類型的操作數(shù),不僅僅是布爾值。在有一個(gè)操作數(shù)不是布爾值的情況下,邏輯與操作就不一定返回布爾值;規(guī)則如下:
1.如果第一個(gè)操作數(shù)是對(duì)象,則返回第二個(gè)操作數(shù);
2.如果兩個(gè)操作數(shù)都是對(duì)象,則返回第二個(gè)操作數(shù);
3.如果第二個(gè)操作數(shù)是對(duì)象,只有當(dāng)?shù)谝粋€(gè)操作數(shù)的求值結(jié)果為true的情況下才會(huì)返回對(duì)象;
4.如果有一個(gè)操作數(shù)是null,則返回null;
5.如果有一個(gè)操作數(shù)是NaN,則返回NaN;
6.如果有一個(gè)操作數(shù)是undefined,則返回undefined;
例:
var found =true;
var result=(found && a); //這里會(huì)出現(xiàn)錯(cuò)誤,因?yàn)閍未定義
alert(result);
若將found定義為false,則可以執(zhí)行第三步alert(result);因?yàn)閞esult整個(gè)值為false;用不著對(duì)&&右側(cè)操作數(shù)進(jìn)行求值。</br>
<h5>3.邏輯或</h5>
邏輯或操作符由||表示,同時(shí)也是一個(gè)短路操作符,當(dāng)?shù)谝粋€(gè)操作符時(shí)true時(shí),就不需用對(duì)第二個(gè)操作符求值,如果第一個(gè)操作數(shù)不是布爾值,則不一定返回布爾值,規(guī)則如下:
1.如果第一個(gè)操作數(shù)是對(duì)象,則返回第一個(gè)操作數(shù);
2.如果兩個(gè)操作數(shù)都是對(duì)象,則返回第一個(gè)操作數(shù);
3.如果第一個(gè)操作數(shù)的求值結(jié)果為false,則返回第二個(gè)操作數(shù);
4.如果兩個(gè)操作數(shù)都是NaN,則返回NaN;
5.如果兩個(gè)操作數(shù)都是null,則返回null;
6.如果兩個(gè)操作數(shù)都是undefined,則返回undefined;
例:
var found = true;
var result =found||a;
alert(result); //會(huì)執(zhí)行true,
若將found改成false,就會(huì)在第二步發(fā)生錯(cuò)誤;
<h3>乘性操作符</h3>
<h5>1.乘法</h5>
用*表示,用來(lái)計(jì)算兩個(gè)數(shù)的乘積類似于c;規(guī)則如下;
1.如果操作數(shù)都是數(shù)值,按常規(guī)進(jìn)行;若乘積超出了數(shù)值表示范圍,則返回Infinity和-Infinity;
2.若有一個(gè)操作數(shù)是NaN,則返回NaN;
3.如果是Infinity與0相乘,則結(jié)果是NaN;如果與非0數(shù)值相乘,則結(jié)果是Infinity或-Infinity,且正負(fù)號(hào)取決于有符號(hào)操作數(shù)的符號(hào);如果是Infinity與Infinity相乘,則結(jié)果還是Infinity;
4.如果有一個(gè)數(shù)不是數(shù)值,則在后臺(tái)調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,然后再應(yīng)用上面的規(guī)則。</br>
<h5>2.除法</h5>
符號(hào)為/,與乘法類似,處理規(guī)則如下:
1.如果操作數(shù)都是數(shù)值,按常規(guī)進(jìn)行;若乘積超出了數(shù)值表示范圍,則返回Infinity和-Infinity;
2.若有一個(gè)操作數(shù)是NaN,則返回NaN;
3.如果是Infinity被Infinity除,則結(jié)果還是NaN;
4.如果是0被0除,則結(jié)果是NaN;
5.如果是非0的有限數(shù)被0除,則結(jié)果是Infinity或-Infinity,且正負(fù)號(hào)取決于有符號(hào)操作數(shù)的符號(hào);
6.如果是Infinity被任何非0的數(shù)值除,則結(jié)果是Infinity或-Infinity,且正負(fù)號(hào)取決于有符號(hào)操作數(shù)的符號(hào);
7.如果有一個(gè)數(shù)不是數(shù)值,則在后臺(tái)調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,然后再應(yīng)用上面的規(guī)則。</br>
<h5>3.求模</h5>
符號(hào)為%,與前兩個(gè)乘性操作符類似,用法如下:
1.如果操作數(shù)都是數(shù)值,按常規(guī)進(jìn)行,返回除得的余數(shù);
2.如果被除數(shù)是無(wú)窮大值,而除數(shù)是有限大的數(shù)值,則結(jié)果是NaN;
3.如果被除數(shù)是有限大的數(shù)值,而除數(shù)是無(wú)限大值,則結(jié)果是被除數(shù);
4.如果被除數(shù)是有限大的數(shù)值,而除數(shù)是0,則結(jié)果是NaN;
5.如果被除數(shù)是0,則結(jié)果是0;
6.如果是Infinity被 Infinity除,則結(jié)果是NaN;
7.如果有一個(gè)數(shù)不是數(shù)值,則在后臺(tái)調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,然后再應(yīng)用上面的規(guī)則。</br>
<h4>關(guān)系操作符</h4>
小于(<),大于(>),小于等于(<=),大于等于(>=);用于兩個(gè)值進(jìn)行比較,并且這兩個(gè)操作符都會(huì)返回一個(gè)布爾值;規(guī)則如下:
1.如果兩個(gè)操作數(shù)都是數(shù)值,則進(jìn)行數(shù)值比較;
2.如果兩個(gè)操作數(shù)都是字符串,則比較兩個(gè)字符串對(duì)應(yīng)的字符編碼值;
3.如果一個(gè)操作數(shù)是數(shù)值,則將另一個(gè)操作數(shù)轉(zhuǎn)換為數(shù)值進(jìn)行比較;
4.如果一個(gè)操作數(shù)是布爾值,則先將其轉(zhuǎn)換為數(shù)值,然后再進(jìn)行比較;
5.任何操作數(shù)與NaN進(jìn)行比較,結(jié)果都是NaN;
6.如果一個(gè)操作數(shù)是對(duì)象,則調(diào)用該對(duì)象的valueOf()方法,用得到的結(jié)果按前面的規(guī)則進(jìn)行計(jì)算,如果對(duì)象沒(méi)有valueOf()方法,則調(diào)用toString()方法,并用得到的結(jié)果根據(jù)前面的規(guī)則進(jìn)行比較;
例:
var result ="23" <"3" ; //true
因?yàn)閮蓚€(gè)操作數(shù)都是字符串,且"2"的字符編碼是50,而"3"的是51;
var result="23" <3; //false
var result=NaN<3; //false
var result=NaN>=3; //false
因?yàn)槠渲幸粋€(gè)操作數(shù)是數(shù)值,所以"23"要轉(zhuǎn)換為數(shù)值才進(jìn)行比較;</br>
<h4>相等操作符</h4>
當(dāng)相等操作符涉及到對(duì)象時(shí),問(wèn)題較復(fù)雜,所以提供兩種比較方法,相等和不相等--線比較再轉(zhuǎn)換;全等和不全等--僅比較而不轉(zhuǎn)換;</br>
<h5>1.相等和不相等</h5>
<h6>a.在轉(zhuǎn)換不同的數(shù)據(jù)類型時(shí),遵循的規(guī)則:</h6>
1.如果當(dāng)中有一個(gè)操作數(shù)是布爾值,則在轉(zhuǎn)換前先將其轉(zhuǎn)換為數(shù)值:false轉(zhuǎn)換為1,true轉(zhuǎn)換為2;
2.如果一個(gè)操作數(shù)是字符串,另一個(gè)操作數(shù)是數(shù)值,在比較之前先將字符串轉(zhuǎn)換為數(shù)值;
3.如果一個(gè)操作數(shù)是對(duì)象,另一個(gè)操作數(shù)不是,則調(diào)用對(duì)象的valueOf()方法,用得到的基本類型值按前面的規(guī)則進(jìn)行比較;</br>
<h6>b.操作符在進(jìn)行比較是遵循的規(guī)則:</h6>
1.null和undefined是相等的;
2.要比較相等性之前,不能將null和undefined轉(zhuǎn)換成其他任何值;
3.如果有一個(gè)操作數(shù)是NaN,則相等操作符返回false;不相等操作符返回true;(p.s.即使兩個(gè)操作數(shù)都是NaN,則相等操作符也返回false,NaN不等于NaN);
4.如果兩個(gè)操作數(shù)都是對(duì)象,則比較他們是不是同一個(gè)對(duì)象;如果兩個(gè)操作數(shù)都指向同一個(gè)對(duì)象則返回true,反之,返回false;
例:
null==undefined; //true
"NaN"==NaN; //false
NaN!=NaN; //true
undefined==0; //false
null==0; //false</br>
<h5>2.全等和不全等</h5>
全等操作符(===),不全等操作符(!==),在比較兩個(gè)操作數(shù)之前不進(jìn)行轉(zhuǎn)換,其余和相等和不相等操作符沒(méi)有什么區(qū)別;
例:
var result("55"==55); //true 可以通過(guò)轉(zhuǎn)換使字符串變成數(shù)值
var result('55"===55); //false數(shù)據(jù)類型不同
<h6>注意:</h6>null==undefined會(huì)返回true,而null===undefined會(huì)返回false;</br>
<h4>條件操作符</h4>
該操作符和C語(yǔ)言中條件操作符類似,例:
var max = (num1>num2) ? num1 : num2;
在這里,這個(gè)表達(dá)式的意思是;如果num1>num2,則關(guān)系表達(dá)式返回true,將num1的值賦給max,反之,返回false,并將num2的值賦給max;</br>
<h4>逗號(hào)操作符</h4>
逗號(hào)操作符有兩個(gè)用途:
<h5>1.聲明多個(gè)變量</h5>
例:
var num1=1,num2=2,num3=3;</br>
<h5>2.賦值</h5>
在進(jìn)行賦值時(shí),逗號(hào)操作符返回表達(dá)式中最后一項(xiàng);
例:
var num=(1,2,3,4,5,6); //num最后的值為6