[前端] 操作符、語(yǔ)句、函數(shù)
操作符:
大部分與 C 一樣,只寫不一樣的部分。
自增自減:與 C 不同,在 JS 內(nèi)它們可以運(yùn)用于所有數(shù)據(jù)類型:
1、若字符串只有數(shù)字,則進(jìn)行轉(zhuǎn)換并運(yùn)算,字符串變量被轉(zhuǎn)換為數(shù)值類型,若含其它字符,轉(zhuǎn)為 NaN。
2、對(duì)于 Boolean 值,先轉(zhuǎn)為 0 或 1,再進(jìn)行運(yùn)算。
3、對(duì)于對(duì)象,先調(diào)用 valueOf() 獲得返回值再進(jìn)行運(yùn)算,如果返回值是 NaN,再調(diào)用 toString() 然后運(yùn)算。
2. 一元 +、- 運(yùn)算符,+ 的作用和 Number() 一樣,- 的作用是取負(fù)值。
位操作符:基本與 C 相同,右移多了個(gè)有符號(hào)和無(wú)符號(hào)。
布爾操作符:有 !、&&、|| 三個(gè)。
!:除了 對(duì)象、非空字符串、任意非 0 數(shù)值,對(duì)剩下的所有值運(yùn)算結(jié)果都是 true。
&&:運(yùn)算結(jié)果不一定是布爾值。
1、若第一個(gè)操作數(shù)是對(duì)象,則返回第二個(gè)操作數(shù)。
2、若第一個(gè)操作數(shù)求值為 true 且第二個(gè)操作數(shù)是對(duì)象,返回第二個(gè)操作數(shù)。
3、若二者均為對(duì)象,返回第二個(gè)操作數(shù)。
4、若第一個(gè)操作數(shù)是 null、NaN、undefined,返回 null、NaN、undefined。
||:同樣結(jié)果不一定是布爾值。
1、若第一個(gè)操作數(shù)是對(duì)象,返回第一個(gè)操作數(shù)。
2、若第一個(gè)求值為 false,返回第二個(gè)操作數(shù)。
3、二者都是對(duì)象,返回第一個(gè)操作數(shù)。
4、二者都是 null、NaN、undefined,返回 null、NaN、undefined。
關(guān)于 || 有個(gè)用法是:變量 1 = 變量2|| 變量3; 作用是當(dāng)變量 2 的值不可用時(shí),便賦值變量 3。
乘性運(yùn)算符:*、/、%。
*:正常數(shù)值與 C 相同。
1、若二者都是數(shù)值,而一方為無(wú)符號(hào),結(jié)果均為負(fù)數(shù)。
2、若一方是 NaN,結(jié)果 NaN。
3、若一方不是數(shù)值,則調(diào)用 Number() 再運(yùn)算。
/:正常數(shù)值與 C 相同。
1、若二者都是數(shù)值,而一方為無(wú)符號(hào),結(jié)果均為負(fù)數(shù)。
2、若 0 / 0,結(jié)果 NaN。
3、非零數(shù)值除以 0,結(jié)果是正無(wú)窮或負(fù)無(wú)窮。
4、若一方不是數(shù)值,則調(diào)用 Number() 再運(yùn)算。
%:正常數(shù)值與 C 相同。
1、任何數(shù)取模無(wú)窮大是本身。
2、無(wú)窮大取模有限數(shù),有限數(shù)取模 0,結(jié)果 NaN。
3、0 取模任何數(shù)為 0。
4、若一方不是數(shù)值,則調(diào)用 Number() 再運(yùn)算。
加性運(yùn)算符:+、-。
+:當(dāng)一方不是數(shù)值時(shí),將其轉(zhuǎn)換為字符串,然后進(jìn)行字符串拼接。
關(guān)系運(yùn)算符:>、<、==、!=。===、!==
大于小于:
1、二者都是字符串,依次比較對(duì)應(yīng)位的字符編碼。
2、一方為數(shù)值,則將另一方轉(zhuǎn)換為數(shù)值進(jìn)行比較。
==、!=、:
1、一方是數(shù)值,則轉(zhuǎn)換另一方為數(shù)值。
2、null == undefined
3、只要有 NaN,== 結(jié)果為 false,!= 結(jié)果為 true。
4、二者都是對(duì)象,則判斷是否是同一對(duì)象,是則 true,否則 false。
===、!==:這兩個(gè)不僅比較值,還比較類型,只要類型不同依然 false。
賦值操作符:與 C 相同。
delete 操作符:刪除對(duì)象的屬性,格式:delete 對(duì)象名['屬性名']。
instanceof:專門用來(lái)檢測(cè)對(duì)象類型,格式:實(shí)例名 instanceof 對(duì)象名,即該實(shí)例是否是該對(duì)象的實(shí)例,返回布爾值。
in:用來(lái)判斷通過(guò)某對(duì)象、實(shí)例是否能訪問(wèn)到某屬性,格式:"屬性名" in 對(duì)象或?qū)嵗?,是則返回 true。
語(yǔ)句:
if、do-while、while、for 都與 C 相同。
for-in:for(let 變量名 in 實(shí)例名){ 循環(huán)體 },迭代語(yǔ)句,用來(lái)枚舉操作對(duì)象的屬性,但當(dāng)遇到屬性為 null 或 undefined 時(shí)便停止執(zhí)行,不報(bào)錯(cuò),枚舉時(shí),每次將實(shí)例的一個(gè)屬性名賦值到括號(hào)內(nèi)聲明的變量中,在循環(huán)體中進(jìn)行操作,即括號(hào)內(nèi)聲明的那個(gè)變量存儲(chǔ)的是字符串,可以通過(guò)這個(gè)字符串操作對(duì)象的每個(gè)屬性。
label 語(yǔ)句:類似 C 的 goto 一樣不建議使用,用來(lái)配合循環(huán)跳出語(yǔ)句一次性跳出多重循環(huán)。
with 語(yǔ)句:用來(lái)簡(jiǎn)化對(duì)象的賦值操作,嚴(yán)格模式不允許使用,例子如下:
????let a,b,c;
????with(某對(duì)象名)
????{
????????a = 屬性名;
????????b = 屬性名;
????????c = 屬性名;
????}
switch 語(yǔ)句:用法與 C 相同,但 case 被擴(kuò)展到可使用所有數(shù)據(jù)類型,甚至支持變量、表達(dá)式,非常自由。
函數(shù):
JS 的函數(shù)很寬松,形參與實(shí)參并沒(méi)有個(gè)數(shù)聯(lián)系,你可以一個(gè)形參都不設(shè)卻傳入很多實(shí)參,函數(shù)執(zhí)行前,實(shí)參會(huì)被復(fù)制到一個(gè)類數(shù)組對(duì)象 arguments 中,但注意是復(fù)制不是引用,參數(shù)與 arguments 在內(nèi)存的位置不是共用的,它們是分開獨(dú)立存儲(chǔ)的,只是值相同。在嚴(yán)格模式下,不能使用 arguments。