隱式類型轉(zhuǎn)換

類型系統(tǒng)按照「是否允許隱式類型轉(zhuǎn)換」來分類卖子,可以分為強類型和弱類型捏题。TypeScript 是弱類型缝裤。

數(shù)學運算符中的類型轉(zhuǎn)換

由于JS并沒有類型聲明,所以任意兩個變量或字面量铜靶,都可以做加減乘除叔遂。

1. 減、乘、除

我們在對各種非 Number 類型運用數(shù)學運算符 (減已艰、乘痊末、除)時,會先將非 Number 類型轉(zhuǎn)換為 Number 類型哩掺。

1 - true // 0凿叠, 首先把 true 轉(zhuǎn)換為數(shù)字 1, 然后執(zhí)行 1 - 1
1 - null // 1,  首先把 null 轉(zhuǎn)換為數(shù)字 0嚼吞, 然后執(zhí)行 1 - 0
1 * undefined //  NaN, undefined 轉(zhuǎn)換為數(shù)字是 NaN
2 * ['5'] //  10盒件, ['5']首先會變成 '5', 然后再變成數(shù)字 5

2. 加法的特殊性

加法要區(qū)別對待,因為JS中的+還可以用來拼接字符串舱禽。

  • 當一側(cè)為 String 類型履恩,會被識別為字符串拼接,并會優(yōu)先將另一側(cè)轉(zhuǎn)換為字符串類型呢蔫。
  • 當一側(cè)為 Number 類型切心,另一側(cè)為原始類型,會將原始類型轉(zhuǎn)換為 Number 類型片吊。
  • 當一側(cè)為 Number 類型绽昏,另一側(cè)為引用類型,將引用類型和 Number 類型轉(zhuǎn)換成字符串后拼接俏脊。
123 + '123' // 123123   (規(guī)則1)
123 + null  // 123    (規(guī)則2)
123 + true // 124    (規(guī)則2)
123 + {}  // 123[object Object]    (規(guī)則3)

邏輯語句中的類型轉(zhuǎn)換

當我們使用 if while for 語句時全谤,我們期望表達式是一個 Boolean,所以一定伴隨著隱式類型轉(zhuǎn)換爷贫。

1. 單個變量

如果只有單個變量认然,會先將變量轉(zhuǎn)換為 Boolean 值。

只有 null undefined '' NaN 0 false 這幾個是 false漫萄,其他的情況都是 true卷员,比如 {} , []。

2. 使用 == 比較中的 5 條規(guī)則

    1. NaN 和其他任何類型相比 永遠返回 FALSE (包括和他自己)
NaN == NaN // false
NaN === NaN // false
    1. Boolean 和其他任何類型比較腾务,Boolean 首先被轉(zhuǎn)換為 Number 類型毕骡。

true == 1  // true 
true == '2'  // false, 先把 true 變成 1,而不是把 '2' 變成 true
true == ['1']  // true, 先把 true 變成 1岩瘦, ['1']拆箱成 '1', 再參考規(guī)則3
true == ['2']  // false, 同上
undefined == false // false 未巫,首先 false 變成 0,然后參考規(guī)則4
null == false // false启昧,同上
    1. String 和 Number 比較叙凡,先將 String 轉(zhuǎn)換為 Number 類型。
123 == '123' // true, '123' 會先變成 123
'' == 0 // true, '' 會首先變成 0
    1. null == undefined 比較結(jié)果為 true密末,除此之外握爷,null宰啦、undefined 和其他任何結(jié)果的比較值都為 FALSE。
null == undefined // true
null == '' // false
null == 0 // false
null == false // false
undefined == '' // false
undefined == 0 // false
undefined == false // false
    1. 原始類型和引用類型做比較時饼拍,引用類型會依照 ToPrimitive 規(guī)則轉(zhuǎn)換為原始類型赡模。

ToPrimitive 規(guī)則,是引用類型向原始類型轉(zhuǎn)變的規(guī)則师抄,它遵循先 valueOf 后 toString 的模式期望得到一個原始類型漓柑。

如果還是沒法得到一個原始類型,就會拋出 TypeError叨吮。

'[object Object]' == {} 
// true, 對象和字符串比較辆布,對象通過 toString 得到一個基本類型值
'1,2,3' == [1, 2, 3] 
// true, 同上  [1, 2, 3]通過 toString 得到一個基本類型值

練習

  1. [] == ![]
    - 第一步,![] 會變成 false
    - 第二步茶鉴,應(yīng)用 規(guī)則2 锋玲,題目變成: [] == 0
    - 第三步,應(yīng)用 規(guī)則5 涵叮,[]的valueOf是0惭蹂,題目變成: 0 == 0
    - 所以, 答案是 true 割粮!//
  1. [undefined] == false
    - 第一步盾碗,應(yīng)用 規(guī)則5 ,[undefined]通過toString變成 '',
      題目變成  '' == false
    - 第二步舀瓢,應(yīng)用 規(guī)則2 廷雅,題目變成  '' == 0
    - 第三步,應(yīng)用 規(guī)則3 京髓,題目變成  0 == 0
    - 所以航缀, 答案是 true !
    // 但是 if([undefined]) 又是個true堰怨!

附錄:類型轉(zhuǎn)換表



https://chinese.freecodecamp.org/news/javascript-implicit-type-conversion/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芥玉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诚些,更是在濱河造成了極大的恐慌飞傀,老刑警劉巖皇型,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诬烹,死亡現(xiàn)場離奇詭異,居然都是意外死亡弃鸦,警方通過查閱死者的電腦和手機绞吁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唬格,“玉大人家破,你說我怎么就攤上這事颜说。” “怎么了汰聋?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵门粪,是天一觀的道長。 經(jīng)常有香客問我烹困,道長玄妈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任髓梅,我火速辦了婚禮拟蜻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘枯饿。我一直安慰自己酝锅,他們只是感情好,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布奢方。 她就那樣靜靜地躺著搔扁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蟋字。 梳的紋絲不亂的頭發(fā)上阁谆,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機與錄音愉老,去河邊找鬼场绿。 笑死,一個胖子當著我的面吹牛嫉入,可吹牛的內(nèi)容都是我干的焰盗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼咒林,長吁一口氣:“原來是場噩夢啊……” “哼熬拒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起垫竞,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤澎粟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后欢瞪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體活烙,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年遣鼓,在試婚紗的時候發(fā)現(xiàn)自己被綠了啸盏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡骑祟,死狀恐怖回懦,靈堂內(nèi)的尸體忽然破棺而出气笙,到底是詐尸還是另有隱情,我是刑警寧澤怯晕,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布潜圃,位于F島的核電站,受9級特大地震影響舟茶,放射性物質(zhì)發(fā)生泄漏秉犹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一稚晚、第九天 我趴在偏房一處隱蔽的房頂上張望崇堵。 院中可真熱鬧,春花似錦客燕、人聲如沸鸳劳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赏廓。三九已至,卻和暖如春傍妒,著一層夾襖步出監(jiān)牢的瞬間幔摸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工颤练, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留既忆,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓嗦玖,卻偏偏與公主長得像患雇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宇挫,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

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