前端三十|12. [JS] 為什麼 typeof new Array() === ‘object’?
Published in
8 min readSep 28, 2019
JavaScript 由於弱型別的語言特性,對於剛開始學習的新手來說,型別就跟暗戀的對象一樣,總是讓人捉摸不透,即使你用了 typeof
運算子來問他,也會得到意外的答案;今天就讓我們一起來深入認識 JavaScript 中的基礎 - 型別。
本系列文已經重新編校彙整編輯成冊,並正式出版囉!
《前端三十:從 HTML 到瀏覽器渲染的前端開發者必備心法》好評販售中!
喜歡我文章內容的讀者們,歡迎您前往購買支持!
型別
在 JavaScript 中,定義了以下七種型別:
- number:數字
- string:字串
- boolean:布林值
- null:空值
- undefined:未定義
- object:物件
- symbol:符號
我們先來看相對單純的基礎型別們吧:
number
不像一些傳統的語言把數字分成整數/浮點數,在 JavaScript 中數字全部都是 number 類型。例如:整數 123
、浮點數 0.1
、科學記號表示 24e6
。可表達的最大整數為 9007199254740991
,可以透過 Number.MAX_SAFE_INTEGER
取到這個值;同理,也有 Number.MIN_SAFE_INTEGER
為 -9007199254740991
,超過這個值的計算,可能會有玄妙的結果:
9007199254740991 + 1 === 9007199254740991 + 2 // true
另外,JavaScript 也有許多語言都有的 浮點數精度問題:
0.1 + 0.2 // 0.30000000000000004
用來做數學運算時需要特別注意。
number 型別還有個很弔詭的東西叫做 NaN
,是 Not a Number 的縮寫,會在開發者把不是數字的東西做運算時出現;雖然是「Not a Number」,但在 JavaScript 的規範中,它是屬於 number 型別的一部分:
typeof NaN // 'number'