前端三十|12. [JS] 為什麼 typeof new Array() === ‘object’?

Schaos
Schaos’s Blog
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'

--

--