[10] 型別 - 內建型別、基本型別值


keywords:type,built-in types,primitive

型別

型別是一組固有的、內建的特徵,依照這點識別了特定值的行為,讓它與其他值有所分別,對於引擎及開發人員皆是如此。

  • 當我們使用 42 時是想要做一些數值處理,像是算術運算
  • 當我們使用 '42' 時是想要做一些字串操作,像是輸出到頁面上

之前寫 C# 的時候,如果宣告的型別錯誤程式就整個掛掉,像是把 String 做數學計算,我想這就是 JavaScript 型別的爭議吧,對於強型別的語言來說,JavaScript 的型別會強制轉型根本就是地獄。

不過換個角度想,就是因為強制轉型的強大及實用性,讓 JavaScript 得到很大的彈性,前端的世界才會因此以此語言為主,進而使這麼多非本科系的人可以簡單上手,因為它很 flexible,就跟現代流行的斜槓一樣,非本科系跑去做別的科系的工作,有好有壞,它讓擁有市場眼光的專案經理也能撰寫較符合使用者體驗的程式。

內建型別 ( Built-In Types)

根據 2021 版草稿的 ECMAScript Data Types and Values JavaScript 定義了 7 個內建型別:

  1. Undefined
  2. Null
  3. Boolean
  4. String
  5. Symbol
  6. Numeric ( Number and BigInt )
  7. Object
  • 基本型別值 ( Primitives ) 又稱基型值共有 7 個:
    string, number, bigint, boolean, undefined, null, and symbol.
  • 非基型值共有 1 個:
    object
  • 其中比較特別是 null 的型別是長久以來的 bug,應回傳 null 但卻是 object
    typeof null // object
  • null、undefined 是唯兩個 falsy 的基型值
      Boolean(null) // false
      Boolean(undefined) // false
    

根據 2021 版草稿的 ECMAScript 12.5.5 The typeof Operator - Table:35: 一個擁有 [[Call]] 內部特性且可被調用的物件,回傳 function

The typeof Operator

  • object 有兩個子型別:array、function:
    • array 與 object 不同是具有:
      1. 能以數值化的方式來索引 ( object 只能以字串作為 key )
      2. 自動維護並更新 .length 特性
        typeof array // object
    • function 此物件具有一個 length 特性,可以計算參數之數目
        function a(b,c,d){...}
        a.length // 3
        typeof a // function
      

整理一下 JavaScript 定義的型別與 Typeof 回傳的型別:

JavaScript:

  1. string
  2. number
  3. boolean
  4. null
  5. undefined
  6. object
  7. Symbol ( ES6 新引進的 )

Typeof:

  1. string
  2. number
  3. boolean
  4. undefined
  5. object
  6. function
  7. Symbol ( ES6 新引進的 )
  8. bigint
#type #built-in types #primitive
「你所不知道的 JS 」系列書籍閱讀心得,未閱讀前對於 JavaScript 皆是懵懵懂懂,因面試時發現自己很多觀念都不正確不清楚,所以這次一探 JavaScript 的運作方式。 * 系列一開始會先把大方向簡短的整理,之後會以每個項目做詳細的筆記






Related Posts

Day02 - 安裝 Packages 和 Libraries

Day02 - 安裝 Packages 和 Libraries

Nina
[05] JavaScript 入門 - 相等性、不等性

[05] JavaScript 入門 - 相等性、不等性

Eason
Day01:從變數看 bytecode

Day01:從變數看 bytecode

huli


Comments