Javascript 邏輯比較運(yùn)算

眾所周知蕴潦,Javascript是一門弱類型語(yǔ)言(weakly typed or untyped language)。這也造成了諸多問題潭苞,如何進(jìn)行邏輯比較便是問題之一。

首先僧诚,我們需要了解的是,由于Javascript的變量不具有類型振诬,所以其在創(chuàng)造比較運(yùn)算符的時(shí)候加入了值比較和值&類型比較,如下所示:

// 進(jìn)行等于邏輯運(yùn)算時(shí)
== // 僅進(jìn)行值比較肩豁,不進(jìn)行類型比較
=== // 進(jìn)行值比較辫呻,且進(jìn)行類型比較

// 進(jìn)行大小比較邏輯運(yùn)算時(shí)
<, <=, >, >= // 僅進(jìn)行值比較,不進(jìn)行類型比較

在變量進(jìn)行比較的時(shí)候放闺,又可以分為以下幾種情況:

  • 數(shù)字 比較 數(shù)字
  • 數(shù)字 比較 字符串
  • 字符串 比較字符串

數(shù)字 比較 數(shù)字

在數(shù)字同數(shù)字比較時(shí),Javascript解釋器(后統(tǒng)稱解釋器)首先會(huì)判斷兩個(gè)變量是否為數(shù)字類型篡悟,如果是匾寝,則可以直接進(jìn)行數(shù)字大小判斷,如下所示:

1 == 1 // true
1 == 2 // false
1 < 2 // true
1 > 2 // false
...

數(shù)字 比較 字符串

在數(shù)字同字符串進(jìn)行比較時(shí)艳悔,解釋器首先會(huì)將字符串進(jìn)行數(shù)字化處理(也許是Number操作,具體還需要參考不同瀏覽器Javascript引擎比較運(yùn)算符邏輯實(shí)現(xiàn))抡锈,然后再進(jìn)行比較乔外。

需要注意的是,數(shù)字字符串在數(shù)字化后會(huì)被轉(zhuǎn)換為對(duì)應(yīng)數(shù)字袁稽;非數(shù)字字符串在數(shù)字化時(shí)始終會(huì)被轉(zhuǎn)換為NaN,而任意數(shù)字同NaN進(jìn)行邏輯運(yùn)算补疑,始終會(huì)返回false歹撒。如下所示:

// 數(shù)字同數(shù)字字符串進(jìn)行比較
1 > '2' // false
1 < '2' // true
1 == '1' // true
1 === '1' // false
...
// 數(shù)字同非數(shù)字字符串進(jìn)行比較
1 > 'a' // false
1 < 'a' // false
1 == 'a' // false
1 === 'a' // false
...
// 數(shù)字同NaN進(jìn)行比較
1 > NaN // false
1 < NaN // false
1 == NaN // false
1 === NaN // false

字符串 比較 字符串

字符串與字符串進(jìn)行比較時(shí),就比較有意思了暖夭。當(dāng)一個(gè)字符串同另一個(gè)字串進(jìn)行比較邏輯運(yùn)算時(shí)撵孤,會(huì)按照字符在串中出現(xiàn)的順序竭望,依次進(jìn)行ASCII編碼的十進(jìn)制運(yùn)算,直到一方字符結(jié)束(只會(huì)比較相同位置的字符)闭专,通俗一點(diǎn)來說,就是進(jìn)行碼位計(jì)算(也許是String.prototype.charCodeAt操作影钉,具體還需要參考不同瀏覽器Javascript引擎比較運(yùn)算符邏輯實(shí)現(xiàn))掘剪。如下所示:

// 相同長(zhǎng)度比較
'0' > '1'  // false

// 流程如下:
1. 左 = '0'.charCodeAt(0) // 48
2. 右 = '1'.charCodeAt(0) // 49
3. 48 > 49 // false
4. 左 > 右 // false

// 不同長(zhǎng)度比較
'12' > '101' // true

// 流程如下:
// 第一位相同,故省去比較步驟
1. 左 = '2'.charCodeAt(0) // 50
2. 右 = '0'.charCodeAt(0) // 48
3. 多出的一位不再進(jìn)行比較
4. 50 > 48 // true
5. 左 > 右 // true

// 再來一個(gè)例子廉赔,有助消化
'2a' > '1b' // true

// 流程如下:
1. 左1 = '2'.charCodeAt(0) // 50
2. 右1 = '1'.charCodeAt(0) // 49
3. 左2 = 'a'.charCodeAt(0) // 97
4. 右2 = 'b'.charCodeAt(0) // 98
5. 左1 > 右1 // true
6. 由于首位已經(jīng)左邊大于右邊了予权,無(wú)論還有多少位字符,都不用再進(jìn)行比較扫腺,可直接得出結(jié)論
7. 左 > 右 // true

// 機(jī)智一點(diǎn)的同學(xué)應(yīng)該已經(jīng)察覺村象,由于ASCII編碼中,美式英文字符是區(qū)分大小寫的厚者,
// 故得出的十進(jìn)制編碼表示也不一致,固有以下情況:

// 大小寫英文比較
'a' < 'A' // false

左 = 'a'.charCodeAt(0) // 97
右 = 'A'.charCodeAt(0) // 65

顯然账忘,97 > 65熙宇,故這個(gè)比較結(jié)果為false。

參考文獻(xiàn)

https://www.w3schools.com/js/js_comparisons.asp
https://stackoverflow.com/questions/10863092/why-is-string-11-less-than-string-3
https://en.wikipedia.org/wiki/Strong_and_weak_typing
https://zh.wikipedia.org/wiki/ASCII

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蒋荚,一起剝皮案震驚了整個(gè)濱河市馆蠕,隨后出現(xiàn)的幾起案子惊奇,更是在濱河造成了極大的恐慌播赁,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件容为,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡竭缝,警方通過查閱死者的電腦和手機(jī)沼瘫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來湿故,“玉大人,你說我怎么就攤上這事坛猪≡砉桑” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵就斤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我洋机,道長(zhǎng)洋魂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任副砍,我火速辦了婚禮,結(jié)果婚禮上膀懈,老公的妹妹穿的比我還像新娘谨垃。我一直安慰自己硼控,他們只是感情好胳赌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疑苫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撼短。 梳的紋絲不亂的頭發(fā)上挺勿,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音不瓶,去河邊找鬼。 笑死熙参,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的孽椰。 我是一名探鬼主播泥兰,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了迈嘹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤融痛,失蹤者是張志新(化名)和其女友劉穎神僵,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體保礼,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡责语,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年坤候,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了企蹭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片白筹。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡徒河,死狀恐怖送漠,靈堂內(nèi)的尸體忽然破棺而出顽照,到底是詐尸還是另有隱情螺男,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布奢人,位于F島的核電站淆院,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏土辩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一各墨、第九天 我趴在偏房一處隱蔽的房頂上張望启涯。 院中可真熱鬧贬堵,春花似錦结洼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宏所。三九已至,卻和暖如春楣铁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盖腕。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工溃列, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人听隐。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像风范,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子硼婿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line)禽车,也就是一...
    悟名先生閱讀 4,118評(píng)論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理殉摔,服務(wù)發(fā)現(xiàn)州胳,斷路器逸月,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 校園里有一條很長(zhǎng)很長(zhǎng)的水泥路 不寬 每天都是擁擠的人群 清晨 好像墨水沒有暈開 起的很長(zhǎng)的人和松鼠 帶著籃子的舊車...
    李小羽閱讀 268評(píng)論 0 1
  • 工資算好的碗硬,大家看看有沒有問題腐缤。 很多問題肛响。為什么還是扣了我三百塊惜索?已經(jīng)夠數(shù)了。 是那張租單你主單,而且拆完數(shù)當(dāng)月...
    流浪癡人閱讀 133評(píng)論 0 0
  • 我有一個(gè)非常要好的朋友虎囚,雖然我們真正意義上成為朋友才不過兩年光景蔫磨,但她對(duì)我意義非凡淘讥,因?yàn)楹敛豢鋸埖恼f堤如,她帶給我的改...
    笨雞最愛的鴨蛋黃閱讀 1,715評(píng)論 1 2