5.相等操作符
????在javascript里家凯,可以進(jìn)行相等判斷的有兩種操作符:相等操作符‘==’和全等操作符‘===’疗疟。出現(xiàn)兩個(gè)相等操作符程帕,究其根源,還是源于js中邏輯判斷前獨(dú)有的類型轉(zhuǎn)換帶來的問題地啰。當(dāng)一個(gè)對(duì)象被進(jìn)行邏輯操作愁拭,這個(gè)對(duì)象會(huì)被轉(zhuǎn)化為與另外一個(gè)操作數(shù)相近的類型。這有的時(shí)候是違背開發(fā)人員初衷的亏吝。因此岭埠,js特別定義了兩種相等操作符:
????相等操作符:先轉(zhuǎn)換,再比較蔚鸥。
? ? 全等操作符:僅比較惜论,不轉(zhuǎn)換。
? ? ① 相等與不等操作符:這兩個(gè)類型會(huì)先強(qiáng)制類型轉(zhuǎn)換操作數(shù)止喷,再進(jìn)行比較馆类。其轉(zhuǎn)換遵循下列規(guī)則:
? ? ☆ 如果有一個(gè)操作數(shù)為bool值,則在比較前將其轉(zhuǎn)化為數(shù)值:True = 1弹谁;False = 0乾巧;
? ? ☆ 如果一個(gè)操作數(shù)是字符串,另外一個(gè)操作數(shù)是數(shù)值预愤,則將字符串轉(zhuǎn)化為數(shù)值沟于;
? ? ☆ 如果一個(gè)操作數(shù)是對(duì)象,另外一個(gè)不是植康,則先調(diào)用valueOf()將對(duì)象轉(zhuǎn)化為與另外一個(gè)類型相同的基本類型社裆;
? ? 在進(jìn)行比較時(shí),相等與不等操作符遵循以下原則:
? ? ☆ null = undefined向图;
? ? ☆ null與undefined不能轉(zhuǎn)化為其他類型;
? ? ☆ 如果兩個(gè)操作數(shù)中有至少一個(gè)為NaN,則相等判斷為false标沪;
? ? ☆ 如果兩個(gè)操作數(shù)都是對(duì)象榄攀,則比較他們是否指向同一個(gè)對(duì)象;
? ? ② 全等與不全等操作符:除了在比較前不做數(shù)據(jù)類型的轉(zhuǎn)換金句,全等與相等在比較時(shí)遵循不相同的原則檩赢,全等代表在不進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換時(shí),兩個(gè)操作數(shù)是否相等违寞,而這種相等是值贞瞒,數(shù)據(jù)類型的完全相等。
6.一些操作符的剩余知識(shí)
? ? ① 賦值操作符:A = bool_exp : value1 ? value2趁曼;其含義為當(dāng)bool_exp = true時(shí)军浆,則A = value1,否則A = value2挡闰。
? ? ② 賦值操作符:由=發(fā)展出的一系列賦值操作符:+=乒融,-=掰盘,*=,/=赞季,%=愧捕,<<=,>>=申钩,需要記住的是次绘,這些操作符與對(duì)應(yīng)的A = A op B在效率上沒有任何差別,僅僅是為了簡(jiǎn)化寫法而發(fā)明撒遣。
? ? ③ 逗號(hào)操作符:逗號(hào)操作符允許在一個(gè)語句中做多個(gè)操作邮偎,通常在定義變量或賦值的時(shí)候使用:
六.語句
語句是ECMAScript中的主要內(nèi)容,定義為使用若干關(guān)鍵字來完成一組任務(wù)愉舔。
1.if語句
典型的判斷語句钢猛,沒什么可多提的。
2.do-while語句
do-while語句是后置判斷的循環(huán)語句轩缤,適用于循環(huán)體至少執(zhí)行一次的情況命迈。
3.while語句
while語句是前置判斷的循環(huán)語句,適用于循環(huán)體執(zhí)行0次或若干次的情況火的。
4.for語句
for語句也是一種前置判斷的循環(huán)語句壶愤,但是其具備在循環(huán)開始前,先定義循環(huán)變量馏鹤,以及定義循環(huán)后追加操作的能力征椒。
5.for-in語句
for-in語句是一種專門被設(shè)計(jì)出來用來枚舉對(duì)象的語句。
for-in循環(huán)的運(yùn)行機(jī)理是這樣的:每次循環(huán)時(shí),將對(duì)象的一個(gè)屬性名賦值給i治力,再進(jìn)行循環(huán)操作蒙秒。需要注意的是:因?yàn)镋CMAScript對(duì)象的屬性都是沒有順序的,因此for-in循環(huán)的結(jié)果是沒有順序性的宵统,依照不同的瀏覽器晕讲,得到的結(jié)果可能會(huì)不同。但是可以確定的是:所有的屬性都會(huì)被返回一次马澈。
如果for-in循環(huán)的對(duì)象 = null 或 undefined瓢省,循環(huán)將執(zhí)行0次(ES5修復(fù),ES5前會(huì)報(bào)錯(cuò))
6.Lbel語句
Label語句可以形容為ECMAScript中的go-to痊班,當(dāng)語句執(zhí)行到某個(gè)位置需要跳出到另外一個(gè)位置時(shí)勤婚,可以使用label語句。通常與continue涤伐,break等循環(huán)跳出條件一起使用蛔六。
7.break與continue語句
beak指立刻從當(dāng)前位置強(qiáng)制結(jié)束整個(gè)循環(huán)跳出,而continue指立刻從當(dāng)前位置結(jié)束本輪循環(huán)国章,執(zhí)行for語句定義的追加操作并開始下一輪循環(huán)具钥。
8.with語句
基本淘汰,在這就不多提了液兽。
9.switch-case語句
為了避免寫出if()else if() else if()而被發(fā)明骂删,記一下js中的switch的特點(diǎn):ECMAScript中的switch中可以使用任何類型(在絕大多數(shù)語言中都只支持使用數(shù)字,例如C++四啰,Java)宁玫,其次,case的值也可以是任何類型柑晒,甚至是一個(gè)表達(dá)式: