[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







你可能感興趣的文章

[Day 01] 單例模式及簡單工廠設計模式

[Day 01] 單例模式及簡單工廠設計模式

MTR04_0807

MTR04_0807

Return lots of stars

Return lots of stars






留言討論