1串结、基本概念(3)(JS高級筆記)

4.5 加性操作符

4.5.1 加法

如果兩個操作符都是數(shù)值呻右,執(zhí)行常規(guī)的加法計算跪妥,然后根據(jù)下列規(guī)則返回結(jié)果:

  • 如果有一個操作數(shù)是NaN,則結(jié)果是NaN
  • 如果是InfinityInfinity声滥,則結(jié)果是Infinity
  • 如果是-Infinity-Infinity眉撵,則結(jié)果是-Infinity
  • 如果是Infinity-Infinity侦香,則結(jié)果是NaN
  • 如果是+0+0,則結(jié)果是+0
  • 如果是-0-0纽疟,則結(jié)果是-0
  • 如果是+0-0罐韩,則結(jié)果是+0

不過,如果有一個操作數(shù)是字符串污朽,那么就要應(yīng)用如下規(guī)則:

  • 如果兩個操作數(shù)都是字符串散吵,則將第二個操作數(shù)與第一個操作數(shù)拼接起來
  • 如果只有一個操作數(shù)是字符串,則將另一個操作數(shù)轉(zhuǎn)換為字符串蟆肆,然后再將兩個字符串拼接起來矾睦。

4.5.2 減法

如果兩個操作符都是數(shù)值,執(zhí)行常規(guī)的減法計算炎功,然后根據(jù)下列規(guī)則返回結(jié)果:

  • 如果有一個操作數(shù)是NaN枚冗,則結(jié)果是NaN
  • 如果是InfinityInfinity,則結(jié)果是NaN
  • 如果是-Infinity-Infinity蛇损,則結(jié)果是-NaN
  • 如果是Infinity-Infinity赁温,則結(jié)果是Infinity
  • 如果是-InfinityInfinity,則結(jié)果是-Infinity
  • 如果是+0+0淤齐,則結(jié)果是+0
  • 如果是+0-0股囊,則結(jié)果是-0
  • 如果是-0-0,則結(jié)果是+0
  • 如果有一個操作數(shù)是字符串更啄、布爾值毁涉、nullundefined,則先在后臺調(diào)用Number()函數(shù)將其轉(zhuǎn)換為數(shù)值锈死,然后再根據(jù)前面的規(guī)則執(zhí)行減法計算。如果轉(zhuǎn)換的結(jié)果是NaN穆壕,則減法的結(jié)果就是NaN
  • 如果有一個操作數(shù)是對象待牵,則調(diào)用對象的valueOf()方法取得表示該對象的數(shù)值。如果得到的值是NaN喇勋,則減法的結(jié)果就是NaN缨该。如果對象沒有valueOf()方法,則調(diào)用其toString()方法并將得到的字符串轉(zhuǎn)換為數(shù)值川背。

4.6 關(guān)系操作符

當關(guān)系操作符的操作數(shù)使用了非數(shù)值時贰拿,也要及你想那個數(shù)據(jù)轉(zhuǎn)換或完成某些奇怪的操作。以下就是相應(yīng)的規(guī)則熄云。

  • 如果兩個操作數(shù)都是數(shù)值膨更,則執(zhí)行數(shù)值比較
  • 如果兩個操作數(shù)都是字符串,則比較兩個字符串對應(yīng)的字符編碼值
  • 如果另一個操作數(shù)是數(shù)值缴允,則將另一個操作數(shù)轉(zhuǎn)換為一個數(shù)值荚守,然后執(zhí)行數(shù)值比較
  • 如果一個操作數(shù)是對象,則調(diào)用這個對象的valueOf()方法,用得到的結(jié)果按照前面的規(guī)則執(zhí)行比較矗漾。如果對象沒有valueOf()方法锈候,則調(diào)用toString()方法,并用得到的結(jié)果根據(jù)前面的規(guī)則執(zhí)行比較
  • 如果一個操作數(shù)是布爾值敞贡,則先將其轉(zhuǎn)換為數(shù)值泵琳,然后再執(zhí)行比較。

4.7 相等操作符

ECMAScript中誊役,提供兩組操作符:相等和不想等——先轉(zhuǎn)換再比較获列;全等和不全等——僅比較而不轉(zhuǎn)換

4.7.1 相等和不想等

相等操作符由兩個等于號(==)表示,如果兩個操作數(shù)相等势木,則返回true蛛倦。而不想等操作符由!=表示啦桌,如果兩個操作數(shù)不想等溯壶,則返回true。這兩個操作符都會先轉(zhuǎn)換操作數(shù)(通常為強制轉(zhuǎn)型)甫男,然后再比較它們的相等性且改。

在轉(zhuǎn)換不同的數(shù)據(jù)類型時,相等和不想等操作符遵循下列基本規(guī)則:

  • 如果有一個操作數(shù)是布爾值板驳,則在比較相等性之前先將其轉(zhuǎn)換為數(shù)值——false轉(zhuǎn)換為0又跛,而true轉(zhuǎn)換為1
  • 如果一個操作數(shù)是字符串,另一個操作數(shù)是數(shù)值若治,在比較相等性之前先將字符串轉(zhuǎn)換為數(shù)值
  • 如果一個操作數(shù)是對象慨蓝,另一個操作數(shù)不是,則調(diào)用對象的valueOf()方法端幼,用得到的基本類型值按照前面的規(guī)則進行比較

這兩個操作符在進行比較時則要遵循下列規(guī)則:

表達式 表達式
null == undefined true true == 1 true
"NaN"== NaN false true == 2 false
5 == NaN false undefined == 0 false
NaN == NaN false null == 0 false
NaN != NaN true "5" == 5 true
false == 0 true

4.7.2 全等和不全等

除了在比較之前不轉(zhuǎn)換操作數(shù)之外礼烈,全等和不全等操作符與相等和不想等操作符沒有什么不同。全等操作符由===表示婆跑,它只在兩個操作數(shù)未經(jīng)轉(zhuǎn)換就相等的情況下返回true此熬。不全等操作符由!==表示滑进,它只在兩個操作數(shù)未經(jīng)轉(zhuǎn)換就不相等的情況下返回true犀忱。

記住:null == undefined會返回true扶关,因為它們是類似的值阴汇;但null === undefined會返回false,因為它們是不同類型的值驮审。

五鲫寄、語句

5.1 for-in語句

for-in語句是一種精準的迭代語句吉执,可以用來枚舉對象的屬性。以下是for-in語句的語法:

for(var propName in window){
  document.write(propName);
}

說明:結(jié)果和常規(guī)的for循環(huán)沒有什么不同地来,只是語法更簡潔戳玫。但是,如果表示要迭代的對象的變量值為nullundefined未斑,for-in語句會拋出錯誤咕宿。建議在使用此語法之前檢查對象的值是不是nullundefined

5.2 label語句

直接看示例:

start : for(var i = 0; i < count; i++){
  alert(i);
}

這個例子中定義的start標簽可以在將來由breakcontinue語句引用蜡秽。加標簽的語句一般都是要與for語句等循環(huán)語句配合使用府阀。

5.3 break和continue語句

具體的語法這里不細說,和C語言一樣芽突。下面看一個示例:

var num = 0;
outermost:
for(var i = 0; i < 10; i++){
    for(var j = 0; j < 10; j++){
        if(i == 5 && j == 5){
            continue outermost;
        }
        num++;
    }
}
alert(num);//95

說明:i试浙、j的值都是5的時候,則跳出循環(huán)寞蚌。

5.4 with語句(不建議使用)

with語句的作用是將代碼的作用域設(shè)置到一個特定的對象中田巴。看一個示例:

var qs = location.search.substring(1);
var hostName = location.hostName;
var url = location.href;

可以看到上述代碼都包含location對象挟秤,如果使用with語句壹哺,可以將上述代碼改寫如下:

with(location){
    var qs = search.substring(1);
    var hostName = hostName;
    var url = href;
}

六、函數(shù)

相關(guān)細節(jié)這里不多數(shù)艘刚。嚴格模式對函數(shù)有一些限制:

  • 不能把函數(shù)命名為evalarguments管宵;
  • 不能把參數(shù)命名為evalarguments
  • 不能出現(xiàn)兩個命名參數(shù)同名的情況

如果發(fā)生上述情況攀甚,代碼將無法執(zhí)行箩朴。

6.1 理解參數(shù)

ECMAScript中,函數(shù)不介意傳遞進來多少各參數(shù)秋度,也不在乎傳遞進來參數(shù)是什么數(shù)據(jù)類型隧饼。也就是說,即便你定義的函數(shù)只接受兩個參數(shù)静陈,在調(diào)用這個函數(shù)時也未必一定要傳遞兩個參數(shù)。實際上诞丽,傳遞進來的參數(shù)全部保存在arguments對象中鲸拥,此對象與數(shù)組類似(并不是Array的實例),但是可以像數(shù)組那樣訪問每一個元素僧免。關(guān)于arguments的行為刑赶,還有一點比較有意思,就是它的值永遠與對應(yīng)命名參數(shù)的值保持同步懂衩。如:

function doAdd(num1, num2){
    arguments[1] = 10;
    alert(arguments[0] + num2);
}

每次執(zhí)行這個doAdd()函數(shù)都會重寫第二個參數(shù)撞叨,將第二個參數(shù)的值修改為10金踪。因為arguments對象中的值會自動反映到對應(yīng)的命名參數(shù),所以修改arguments[1]牵敷,也就修改了num2胡岔,結(jié)果它們都變?yōu)?code>10。注意:沒有傳遞值的命名參數(shù)將自動被賦予undefined值枷餐。所有的參數(shù)傳遞都是值靶瘸,不可能通過引用傳遞參數(shù)。

6.2 沒有重載

function addSomeNumber(num){
    return num + 10;
}
//會覆蓋掉上一個同名函數(shù)
function addSomeNumber(num){
    return num + 200;
}
var result = addSomeNumber(100);//300

說明:從代碼中可以看到無法像其他面向?qū)ο笳Z言那樣進行重載毛肋,當然怨咪,可以通過檢查傳入函數(shù)中參數(shù)的類型和數(shù)量并做出不同的反應(yīng)來模仿方法的重載。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末润匙,一起剝皮案震驚了整個濱河市诗眨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孕讳,老刑警劉巖匠楚,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卫病,居然都是意外死亡油啤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門蟀苛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來益咬,“玉大人,你說我怎么就攤上這事帜平∮母妫” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵裆甩,是天一觀的道長冗锁。 經(jīng)常有香客問我,道長嗤栓,這世上最難降的妖魔是什么冻河? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮茉帅,結(jié)果婚禮上叨叙,老公的妹妹穿的比我還像新娘。我一直安慰自己堪澎,他們只是感情好擂错,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著樱蛤,像睡著了一般钮呀。 火紅的嫁衣襯著肌膚如雪剑鞍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天爽醋,我揣著相機與錄音蚁署,去河邊找鬼。 笑死子房,一個胖子當著我的面吹牛形用,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播证杭,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼田度,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了解愤?” 一聲冷哼從身側(cè)響起镇饺,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎送讲,沒想到半個月后奸笤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡哼鬓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年监右,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片异希。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡健盒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出称簿,到底是詐尸還是另有隱情扣癣,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布憨降,位于F島的核電站父虑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏授药。R本人自食惡果不足惜士嚎,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悔叽。 院中可真熱鬧航邢,春花似錦、人聲如沸骄蝇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽九火。三九已至赚窃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岔激,已是汗流浹背勒极。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虑鼎,地道東北人辱匿。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像炫彩,于是被迫代替她去往敵國和親匾七。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

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