javascript操作符

<h2>一元操作符</h2>
<p>只能操作一個值得的操作符叫做一元操作符</p>
<h4>1.遞增和遞減操作符</h4>
遞增和遞減操作符借鑒于c聋呢,具有前置型和后置型坝冕,即a++,++a瓦呼,a--喂窟,--a;計算方式和c語言類似央串,并且這四個操作符對任何值都適用(整數(shù)磨澡,字符串,布爾值质和,浮點數(shù)值和對象)稳摄;在應(yīng)用不同的值時,遞增和遞減遵循下列規(guī)則:</br>
1.在用于一個包含有效數(shù)字字符的字符串時饲宿,先將其轉(zhuǎn)換為數(shù)字值,再執(zhí)行加減1的操作瘫想。字符串變量變成數(shù)值變量仗阅;

例:
var s="2";
s++ ; //值為3

2.在應(yīng)用于一個不包含有效數(shù)字字符的字符串時国夜,將變量的值設(shè)為NaN减噪,字符串變量變成數(shù)值變量;

例:
var s="z";
s++; //值為NaN

3.在應(yīng)用于布爾值false時,先將其轉(zhuǎn)換為數(shù)值0再進(jìn)行計算筹裕,同理醋闭,對于true一樣;

例:
var s= false;
s++; //值為1

4.在運用浮點數(shù)值時朝卒,直接進(jìn)行加減1的操作证逻;但是會由于浮點舍入出現(xiàn)錯誤;

例:
var s=1.1;
s-- ; //值為0.10000000000000009

5.在應(yīng)用于對象時扎运,先調(diào)用對象的valueOf()方法來獲得一個可操作的值瑟曲,然后再進(jìn)行前面的計算,若結(jié)果是NaN豪治,則在調(diào)用toString()方法后再應(yīng)用前述規(guī)則洞拨,使對象變量變成數(shù)值變量;</br>
<h4>2.一元加和減操作符</h4>
一元加和減操作符主要用于算數(shù)的基本運算负拟,當(dāng)非數(shù)值應(yīng)用于一元操作符時烦衣,轉(zhuǎn)換規(guī)則和Number()方式相同;同時一元減操作符主要用于表示負(fù)數(shù),當(dāng)用于數(shù)值時,該值會變成負(fù)數(shù)巩检,當(dāng)用于非數(shù)值時嗤详,運用和加相同的規(guī)則,最后將得到的數(shù)值轉(zhuǎn)換為負(fù)數(shù)他巨;

例:
var s="01";
s=-s; //結(jié)果為-1

<h5>注意:</h5>同時也可以運用到字符串當(dāng)中:
1.可以將多個字符串變量連起來;

例:
txt1="What a very";
txt2="nice day";
txt3=txt1+" "+txt2; //What a very nice day

2.若為字符串和數(shù)字相加時,則直接相加今布;

例:
var x=5+5; //10
var y="5"+5; //55
var z="Hello"+5; //hello5</br>
<h4>布爾操作符</h4>
<h5>1.邏輯非NOT</h5>
邏輯非用!來表示拭抬,可以運用任何值部默,不管這個值是什么類型,這個操作符都會返回一個布爾值造虎;下面有兩種方法運算邏輯非:
<h6>a.首先將它的操作數(shù)轉(zhuǎn)換為一個布爾值傅蹂,然后對其求反,規(guī)則如下:</h6>
1.如果操作數(shù)是一個空的字符串算凿,返回true份蝴;
2.如果操作數(shù)是0;返回true澎媒;
3.如果操作數(shù)是null搞乏,返回true;
4.如果操作數(shù)是NaN戒努,返回true请敦;
5.如果操作數(shù)是undefined镐躲,返回true;
6.如果操作數(shù)是一個對象侍筛,返回false萤皂;
7.如果操作數(shù)是一個非空字符串,返回false匣椰;
8.如果操作數(shù)是任意非0數(shù)值(包括infinity)裆熙,則返回false;
例:
alert(!0); //true;
alert(!NaN); //true
alert(!" "); //true
alerrt(!123456); //false</br>
<h6>b.利用Boolean函數(shù)禽笑,可以同時使用兩個邏輯非進(jìn)行操作入录;第一個邏輯非會基于無論什么操作數(shù)返回一個布爾值,第二個對返回的這個布爾值進(jìn)行求反</h6>
例:
alert(!!NaN); //false
alert(!!" "); //false
alert(!!123456); //true</br>
<h5>2.邏輯與AND</h5>
邏輯與操作符用&&表示佳镜,是一個短路操作符(即如果第一個操作數(shù)能決定結(jié)果僚稿,那么就不會再對第二個操作數(shù)求值),該操作符可以運用任何類型的操作數(shù)蟀伸,不僅僅是布爾值蚀同。在有一個操作數(shù)不是布爾值的情況下,邏輯與操作就不一定返回布爾值啊掏;規(guī)則如下:
1.如果第一個操作數(shù)是對象蠢络,則返回第二個操作數(shù);
2.如果兩個操作數(shù)都是對象迟蜜,則返回第二個操作數(shù)刹孔;
3.如果第二個操作數(shù)是對象,只有當(dāng)?shù)谝粋€操作數(shù)的求值結(jié)果為true的情況下才會返回對象娜睛;
4.如果有一個操作數(shù)是null芦疏,則返回null;
5.如果有一個操作數(shù)是NaN微姊,則返回NaN;
6.如果有一個操作數(shù)是undefined分预,則返回undefined兢交;

例:
var found =true;
var result=(found && a); //這里會出現(xiàn)錯誤,因為a未定義
alert(result);
若將found定義為false笼痹,則可以執(zhí)行第三步alert(result);因為result整個值為false配喳;用不著對&&右側(cè)操作數(shù)進(jìn)行求值。</br>
<h5>3.邏輯或</h5>
邏輯或操作符由||表示凳干,同時也是一個短路操作符晴裹,當(dāng)?shù)谝粋€操作符時true時,就不需用對第二個操作符求值救赐,如果第一個操作數(shù)不是布爾值涧团,則不一定返回布爾值,規(guī)則如下:
1.如果第一個操作數(shù)是對象,則返回第一個操作數(shù)泌绣;
2.如果兩個操作數(shù)都是對象钮追,則返回第一個操作數(shù);
3.如果第一個操作數(shù)的求值結(jié)果為false阿迈,則返回第二個操作數(shù)元媚;
4.如果兩個操作數(shù)都是NaN,則返回NaN苗沧;
5.如果兩個操作數(shù)都是null刊棕,則返回null;
6.如果兩個操作數(shù)都是undefined待逞,則返回undefined甥角;
例:
var found = true;
var result =found||a;
alert(result); //會執(zhí)行true,
若將found改成false飒焦,就會在第二步發(fā)生錯誤蜈膨;
<h3>乘性操作符</h3>
<h5>1.乘法</h5>
用*表示,用來計算兩個數(shù)的乘積類似于c牺荠;規(guī)則如下翁巍;
1.如果操作數(shù)都是數(shù)值,按常規(guī)進(jìn)行休雌;若乘積超出了數(shù)值表示范圍灶壶,則返回Infinity和-Infinity;
2.若有一個操作數(shù)是NaN杈曲,則返回NaN驰凛;
3.如果是Infinity與0相乘,則結(jié)果是NaN担扑;如果與非0數(shù)值相乘恰响,則結(jié)果是Infinity或-Infinity,且正負(fù)號取決于有符號操作數(shù)的符號涌献;如果是Infinity與Infinity相乘胚宦,則結(jié)果還是Infinity;
4.如果有一個數(shù)不是數(shù)值燕垃,則在后臺調(diào)用Number()將其轉(zhuǎn)換為數(shù)值枢劝,然后再應(yīng)用上面的規(guī)則。</br>
<h5>2.除法</h5>
符號為/卜壕,與乘法類似您旁,處理規(guī)則如下:
1.如果操作數(shù)都是數(shù)值,按常規(guī)進(jìn)行轴捎;若乘積超出了數(shù)值表示范圍鹤盒,則返回Infinity和-Infinity蚕脏;
2.若有一個操作數(shù)是NaN,則返回NaN昨悼;
3.如果是Infinity被Infinity除蝗锥,則結(jié)果還是NaN;
4.如果是0被0除率触,則結(jié)果是NaN终议;
5.如果是非0的有限數(shù)被0除,則結(jié)果是Infinity或-Infinity葱蝗,且正負(fù)號取決于有符號操作數(shù)的符號穴张;
6.如果是Infinity被任何非0的數(shù)值除,則結(jié)果是Infinity或-Infinity两曼,且正負(fù)號取決于有符號操作數(shù)的符號皂甘;
7.如果有一個數(shù)不是數(shù)值,則在后臺調(diào)用Number()將其轉(zhuǎn)換為數(shù)值悼凑,然后再應(yīng)用上面的規(guī)則偿枕。</br>
<h5>3.求模</h5>
符號為%,與前兩個乘性操作符類似户辫,用法如下:
1.如果操作數(shù)都是數(shù)值渐夸,按常規(guī)進(jìn)行,返回除得的余數(shù)渔欢;
2.如果被除數(shù)是無窮大值墓塌,而除數(shù)是有限大的數(shù)值,則結(jié)果是NaN奥额;
3.如果被除數(shù)是有限大的數(shù)值苫幢,而除數(shù)是無限大值,則結(jié)果是被除數(shù)垫挨;
4.如果被除數(shù)是有限大的數(shù)值韩肝,而除數(shù)是0,則結(jié)果是NaN九榔;
5.如果被除數(shù)是0伞梯,則結(jié)果是0;
6.如果是Infinity被 Infinity除帚屉,則結(jié)果是NaN;
7.如果有一個數(shù)不是數(shù)值漾峡,則在后臺調(diào)用Number()將其轉(zhuǎn)換為數(shù)值攻旦,然后再應(yīng)用上面的規(guī)則。</br>
<h4>關(guān)系操作符</h4>
小于(<),大于(>),小于等于(<=),大于等于(>=)生逸;用于兩個值進(jìn)行比較牢屋,并且這兩個操作符都會返回一個布爾值且预;規(guī)則如下:
1.如果兩個操作數(shù)都是數(shù)值,則進(jìn)行數(shù)值比較烙无;
2.如果兩個操作數(shù)都是字符串锋谐,則比較兩個字符串對應(yīng)的字符編碼值;
3.如果一個操作數(shù)是數(shù)值截酷,則將另一個操作數(shù)轉(zhuǎn)換為數(shù)值進(jìn)行比較涮拗;
4.如果一個操作數(shù)是布爾值,則先將其轉(zhuǎn)換為數(shù)值迂苛,然后再進(jìn)行比較三热;
5.任何操作數(shù)與NaN進(jìn)行比較,結(jié)果都是NaN三幻;
6.如果一個操作數(shù)是對象就漾,則調(diào)用該對象的valueOf()方法,用得到的結(jié)果按前面的規(guī)則進(jìn)行計算念搬,如果對象沒有valueOf()方法抑堡,則調(diào)用toString()方法,并用得到的結(jié)果根據(jù)前面的規(guī)則進(jìn)行比較朗徊;
例:
var result ="23" <"3" ; //true
因為兩個操作數(shù)都是字符串首妖,且"2"的字符編碼是50,而"3"的是51荣倾;
var result="23" <3; //false
var result=NaN<3; //false
var result=NaN>=3; //false
因為其中一個操作數(shù)是數(shù)值悯搔,所以"23"要轉(zhuǎn)換為數(shù)值才進(jìn)行比較;</br>
<h4>相等操作符</h4>
當(dāng)相等操作符涉及到對象時舌仍,問題較復(fù)雜妒貌,所以提供兩種比較方法,相等和不相等--線比較再轉(zhuǎn)換铸豁;全等和不全等--僅比較而不轉(zhuǎn)換灌曙;</br>
<h5>1.相等和不相等</h5>
<h6>a.在轉(zhuǎn)換不同的數(shù)據(jù)類型時,遵循的規(guī)則:</h6>
1.如果當(dāng)中有一個操作數(shù)是布爾值节芥,則在轉(zhuǎn)換前先將其轉(zhuǎn)換為數(shù)值:false轉(zhuǎn)換為1在刺,true轉(zhuǎn)換為2;
2.如果一個操作數(shù)是字符串头镊,另一個操作數(shù)是數(shù)值蚣驼,在比較之前先將字符串轉(zhuǎn)換為數(shù)值;
3.如果一個操作數(shù)是對象相艇,另一個操作數(shù)不是颖杏,則調(diào)用對象的valueOf()方法,用得到的基本類型值按前面的規(guī)則進(jìn)行比較坛芽;</br>
<h6>b.操作符在進(jìn)行比較是遵循的規(guī)則:</h6>
1.null和undefined是相等的留储;
2.要比較相等性之前翼抠,不能將null和undefined轉(zhuǎn)換成其他任何值;
3.如果有一個操作數(shù)是NaN获讳,則相等操作符返回false阴颖;不相等操作符返回true;(p.s.即使兩個操作數(shù)都是NaN丐膝,則相等操作符也返回false量愧,NaN不等于NaN);
4.如果兩個操作數(shù)都是對象尤误,則比較他們是不是同一個對象侠畔;如果兩個操作數(shù)都指向同一個對象則返回true,反之损晤,返回false软棺;
例:
null==undefined; //true
"NaN"==NaN; //false
NaN!=NaN; //true
undefined==0; //false
null==0; //false</br>
<h5>2.全等和不全等</h5>
全等操作符(===),不全等操作符(尤勋!==)喘落,在比較兩個操作數(shù)之前不進(jìn)行轉(zhuǎn)換,其余和相等和不相等操作符沒有什么區(qū)別最冰;
例:
var result("55"==55); //true 可以通過轉(zhuǎn)換使字符串變成數(shù)值
var result('55"===55); //false數(shù)據(jù)類型不同
<h6>注意:</h6>null==undefined會返回true瘦棋,而null===undefined會返回false;</br>
<h4>條件操作符</h4>
該操作符和C語言中條件操作符類似暖哨,例:
var max = (num1>num2) ? num1 : num2;
在這里赌朋,這個表達(dá)式的意思是;如果num1>num2篇裁,則關(guān)系表達(dá)式返回true沛慢,將num1的值賦給max达布,反之团甲,返回false,并將num2的值賦給max黍聂;</br>
<h4>逗號操作符</h4>
逗號操作符有兩個用途:
<h5>1.聲明多個變量</h5>
例:
var num1=1,num2=2,num3=3;</br>
<h5>2.賦值</h5>
在進(jìn)行賦值時躺苦,逗號操作符返回表達(dá)式中最后一項;
例:
var num=(1,2,3,4,5,6); //num最后的值為6

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末产还,一起剝皮案震驚了整個濱河市匹厘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脐区,老刑警劉巖愈诚,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡扰路,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門倔叼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汗唱,“玉大人,你說我怎么就攤上這事丈攒×ㄗ铮” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵巡验,是天一觀的道長际插。 經(jīng)常有香客問我,道長显设,這世上最難降的妖魔是什么框弛? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮捕捂,結(jié)果婚禮上瑟枫,老公的妹妹穿的比我還像新娘。我一直安慰自己指攒,他們只是感情好慷妙,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著允悦,像睡著了一般膝擂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上隙弛,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天架馋,我揣著相機(jī)與錄音,去河邊找鬼驶鹉。 笑死绩蜻,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的室埋。 我是一名探鬼主播办绝,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼姚淆!你這毒婦竟也來了孕蝉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腌逢,失蹤者是張志新(化名)和其女友劉穎降淮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡佳鳖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年霍殴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片系吩。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡来庭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出穿挨,到底是詐尸還是另有隱情月弛,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布科盛,位于F島的核電站帽衙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贞绵。R本人自食惡果不足惜厉萝,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望但壮。 院中可真熱鬧冀泻,春花似錦、人聲如沸蜡饵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溯祸。三九已至肢专,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焦辅,已是汗流浹背博杖。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留筷登,地道東北人剃根。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像前方,于是被迫代替她去往敵國和親狈醉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一元操作符 只能操作一個值的操作符惠险。 遞增和遞減操作符 前置型:位于要操作的變量之前苗傅; 后置型:位于要操作的變量之...
    Sketch閱讀 337評論 0 0
  • 一元操作符++,--操作符操作示例 +,-操作符+基本是原樣輸出 布爾操作符邏輯非 ! 如果前面再加上個!會看起來...
    togeek閱讀 593評論 3 3
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理班巩,服務(wù)發(fā)現(xiàn)渣慕,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 本記錄簡述kalibr標(biāo)定過程以及個人在標(biāo)定過程中出現(xiàn)的問題和解決思路kalibr 主要內(nèi)容: kalibr標(biāo)定c...
    thinkpp閱讀 10,756評論 0 2