if(xx)和xx==xx的判斷

if和==這兩個(gè)判斷方式雖然都是通過布爾值來判斷結(jié)果的,但是這兩個(gè)判斷方式的原理還是有很大差距的炬灭。

if(xx)的判斷方式

關(guān)于if的判斷方式指煎,來看幾個(gè)例子。

if ("hello") {
console.log("hello")
}
if ("") {
console.log('empty')
}
if (" ") {
console.log('blank')
}

結(jié)果是什么尝偎?

第一個(gè)輸出“hello”饶火;第二個(gè)沒有結(jié)果輸出;第三個(gè)輸出“blank”致扯。

為什么呢肤寝??

我們前面說過抖僵,if與==都是通過布爾值來判斷結(jié)果的鲤看。因此,if會(huì)把后面括號(hào)內(nèi)的元素強(qiáng)制轉(zhuǎn)換為布爾值耍群,根據(jù)轉(zhuǎn)化后的結(jié)果進(jìn)行判斷义桂。

轉(zhuǎn)化規(guī)則
類型 結(jié)果
Undefined false
Null false
Boolean 直接判斷
Number +0, ?0, 或者 NaN 為 false, 其他為 true
String 空字符串為 false,其他都為 true
Object true

根據(jù)這個(gè)規(guī)則我們可以很清楚的知道這個(gè)式子的結(jié)果,也可控制式子得到我們想要的結(jié)果蹈垢。

==的判斷方式

在了解==的判斷方式之前我們需要先了解一下他的運(yùn)算規(guī)則慷吊。

==的運(yùn)算規(guī)則

==是進(jìn)行值的比較,而===則是進(jìn)行屬性與值的比較曹抬。前者在比較的時(shí)候Javascript會(huì)自動(dòng)的幫我們進(jìn)行屬性的轉(zhuǎn)換溉瓶,但是有時(shí)候會(huì)有一些很奇怪的問題出現(xiàn),這時(shí)候我們就需要知道它的轉(zhuǎn)換規(guī)則谤民。

  • 如果兩個(gè)值類型相等堰酿,就會(huì)嚴(yán)格的執(zhí)行相等的運(yùn)算
  • 如果兩個(gè)值類型不相等:
    1. 如果一個(gè)是null,一個(gè)是undefined张足,那么相等
    2. 如果一個(gè)是數(shù)字触创,一個(gè)是字符串,先將字符串轉(zhuǎn)為數(shù)字为牍,然后比較
    3. 如果一個(gè)值是true/false則將其轉(zhuǎn)為1/0比較
    4. 如果一個(gè)值是對(duì)象哼绑,一個(gè)是數(shù)字或字符串顺饮,則嘗試使用valueOf和toString轉(zhuǎn)換后比較
    5. 其它就不相等了
==的判斷規(guī)則

我們還是先來看幾個(gè)例子

"" == 0
"" == false
" " == true
"hello" == true
"0.00" == false

結(jié)果是什么?

第一個(gè)結(jié)果為true凌那,第二個(gè)結(jié)果為true兼雄,第三個(gè)結(jié)果為false,第四個(gè)結(jié)果為false帽蝶,第五個(gè)結(jié)果為true赦肋。

為什么呢?励稳?
x y 結(jié)果
null undefined true
Number String x == toNumber(y)
Boolean (any) toNumber(x) == y
Object String or Number toPrimitive(x) == y
otherwise otherwise false

這是==在計(jì)算時(shí)的大體轉(zhuǎn)化規(guī)則佃乘,具體的某些計(jì)算方式如下:

toNumber

類型 返回結(jié)果
Undefined NaN
Null 0
Boolean ture -> 1, false -> 0
String “abc” -> NaN, “123” -> 123

toPrimitive

對(duì)于 Object 類型,先嘗試調(diào)用 .valueOf 方法獲取結(jié)果驹尼。 如果沒定義趣避,再嘗試調(diào)用 .toString方法獲取結(jié)果。

這些是if(xx)和 “==”的判斷規(guī)則新翎。有時(shí)候搞清楚原理有助于我們更好的工作程帕,寫出不被評(píng)價(jià)為爛代碼的東西。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末地啰,一起剝皮案震驚了整個(gè)濱河市愁拭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亏吝,老刑警劉巖岭埠,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蔚鸥,居然都是意外死亡惜论,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門止喷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馆类,“玉大人,你說我怎么就攤上這事启盛”钠” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵僵闯,是天一觀的道長。 經(jīng)常有香客問我藤滥,道長鳖粟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任拙绊,我火速辦了婚禮向图,結(jié)果婚禮上泳秀,老公的妹妹穿的比我還像新娘。我一直安慰自己榄攀,他們只是感情好嗜傅,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著檩赢,像睡著了一般吕嘀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贞瞒,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天偶房,我揣著相機(jī)與錄音,去河邊找鬼军浆。 笑死棕洋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乒融。 我是一名探鬼主播掰盘,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼赞季!你這毒婦竟也來了庆杜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤碟摆,失蹤者是張志新(化名)和其女友劉穎晃财,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體典蜕,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡断盛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愉舔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钢猛。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖轩缤,靈堂內(nèi)的尸體忽然破棺而出命迈,到底是詐尸還是另有隱情,我是刑警寧澤火的,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布壶愤,位于F島的核電站,受9級(jí)特大地震影響馏鹤,放射性物質(zhì)發(fā)生泄漏征椒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一湃累、第九天 我趴在偏房一處隱蔽的房頂上張望勃救。 院中可真熱鬧碍讨,春花似錦、人聲如沸蒙秒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晕讲。三九已至覆获,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間益兄,已是汗流浹背锻梳。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留净捅,地道東北人疑枯。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像蛔六,于是被迫代替她去往敵國和親荆永。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理国章,服務(wù)發(fā)現(xiàn)具钥,斷路器,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 前端07班 王語句JavaScript程序的執(zhí)行單位為行(line)液兽,也就是一行一行地執(zhí)行骂删。一般情況下,每一行就是...
    ea203453e188閱讀 882評(píng)論 0 4
  • FreeCodeCamp - Basic JavaScript 寫在前面: 我曾經(jīng)在進(jìn)谷前刷過這一套題四啰,不過當(dāng)時(shí)只...
    付林恒閱讀 16,431評(píng)論 5 28
  • 語句 JavaScript程序的執(zhí)行單位為行(line)宁玫,也就是一行一行地執(zhí)行。一般情況下柑晒,每一行就是一個(gè)語句欧瘪。 ...
    米塔塔閱讀 454評(píng)論 1 10
  • 1、 我的一個(gè)朋友是84年出生的80后匙赞,在05年的時(shí)候開了一家計(jì)算機(jī)方面的公司(具體名字就先不說了)佛掖,代理銷售過某...
    391a778d051a閱讀 428評(píng)論 0 0