前言
類型轉換是將值從一種類型轉換為另一種類型的過程(比如字符串轉數字,對象轉布爾值等)。任何類型不論是原始類型還是對象類型都可以進行類型轉換,JavaScript 的原始類型有:number, string, boolean, null, undefined, Symbol。
本文將通過 17 道題目來深入的了解 JS 中的類型轉換,通過閱讀本文之后,你將能自信的回答出下面題目的答案,并且能夠理解背后的原理。在文章的最后,我講寫出答案并解釋。在看答案之前,你可以把答案寫下來,最后再對照一下,便于找出理解有誤的地方。
true + false12 / "6""number" + 15 + 315 + 3 + "number"[1] > null"foo" + + "bar""true" == truefalse == "false"null == ""!!"false" == !!"true"["x"] == "x"[] + null + 1[1,2,3] == [1,2,3]{} + [] + {} + [1]! + [] + [] + ![]new Date(0) - 0new Date(0) + 0類似于上面的這些問題大概率也會在 JS 面試中被問到, 所以繼續往下讀。
隱式 vs 顯式類型轉換
類型轉換可以分為隱式類型轉換和顯式類型轉換。
當開發人員通過編寫適當的代碼(如Number(value))用于在類型之間進行轉換時,就稱為顯式類型強制轉換(或強制類型轉換)。
然而 JavaScript 是弱類型語言,在某些操作下,值可以在兩種類型之間自動的轉換,這叫做隱式類型轉換。在對不同類型的值使用運算符時通常會發生隱式類型轉換。比如 1 == null, 2 / "5", null + new Date() 。當值被 if 語句包裹時也有可能發生,比如 if(value) {} 會將 value 轉換為 boolean類型。
嚴格相等運算符(===)不會觸發類型隱式轉換,所以它可以用來比較值和類型是否都相等。
隱式類型轉換是一把雙刃劍,使用它雖然可以寫更少的代碼但有時候會出現難以被發現的bug。
三種類型轉換
我們需要知道的第一個規則是:在 JS 中只有 3 種類型的轉換
to string to boolean to number第二,類型轉換的邏輯在原始類型和對象類型上是不同的,但是他們都只會轉換成上面 3 種類型之一。
我們首先分析一下原始類型轉換。
String 類型轉換
String() 方法可以用來顯式將值轉為字符串,隱式轉換通常在有 + 運算符并且有一個操作數是 string 類型時被觸發,如:
String(123) // 顯式類型轉換123 + '' // 隱式類型轉換
所有原始類型轉 String 類型
String(123) // '123'String(-12.3) // '-12.3'String(null) // 'null'String(undefined) // 'undefined'String(true) // 'true'
Symbol 類型轉 String 類型是比較嚴格的,它只能被顯式的轉換
String(Symbol('symbol')) // 'Symbol(symbol)''' + Symbol('symbol') // TypeError is thrown
|
新聞熱點
疑難解答
圖片精選