JavaScript - 談談資料型別

閱讀時間約 8 分鐘
JavaScript 的型別可以分為兩類,分別是原始型別與物件型別,這邊主要談的是 ES6 的寫法。值得注意的是,JavaScript 變數本身不帶有型別,值才有。

原始型別

原始型別(Primitive type)有以下七種:
  • String
  • Number
  • Boolean
  • Null
  • Undefined
  • Symbol:ES6/2015 之後出現
  • BigInt:ES11/2020 之後出現,適用於當數值非常非常大,單純使用 Number 難以負荷時就會使用該型別。
下面就來談談各個型別的特色,但目前 Symbol 和 BigInt 我還沒有使用過,這篇就先不提這兩種,留待以後補充。

字串 String

須使用雙引號 "" 或單引號 '' 包裹起來,且不能混合使用。
console.log("It's a dog."); //"It'is a dog."
console.log('It's a dog.'); //error //英文句子中重複出現單引號,導致 JS 認為語法錯誤
console.log("It is a dog.'); //error //混合使用單引號和雙引號,導致 JS 認為語法錯誤
,如果沒有使用單引號和雙引號,JS 會認為這是變數,認為前面沒有宣告過該變數,就會報錯。
console.log("奶油義大利麵"); //"奶油義大利麵"
console.log(奶油義大利麵); //error //JS認為是在呼叫變數,會報錯

數字 Number

NaN(not an number) 也是屬於 Number,會出現在 JS 自動轉型後的結果無法轉換為數字。

布林 Boolean

只有 true 和 false 兩種值,它不是字串,並不需要用引號包裹,經常用於流程判斷。

Undefind 與 Null 的差異

兩個都表示空值的意思,但使用時機並不相同,像是 Undefined 會出現在已宣告、尚未賦值的變數上,通常並不會手動賦予到變數上。
let mother;
console.log(typeof mother); //Undefined
而 Null 則是會手動賦予給變數,目前所知的使用情境像是:當變數儲存大量資料,需要清空釋放記憶體時,就會手動賦予 Null 到變數上。

物件型別

原始型別以外的都是物件型別(Object Type),包括 Function、Array 都是屬於物件型別,所以並沒有 Function 型別,或是 Array 型別這種東西,包括以下幾個種類:
  • 物件 Object
  • 陣列 Array
  • 函式 Function

物件 Object

使用 { } 包裹的資料,並包含一對 key 和 value,可以儲存多組
let family = {
  father: "Mark", //father 是 key,"mark" 是 value
  mother: "Alice",
  dog: "Momo"
}

陣列 Array

使用 [ ] 包裹的資料,可以儲存多個資料
let drinks = ["可口可樂", "可爾必思", "珍珠奶茶"]

陣列和物件也可以混合使用

let store = {
  boss: "Tina",
  drinks: ["卡布奇諾", "黑咖啡", "珍珠奶茶"],
  customer: 20
}
let stores = [
  {
    storeName: "朵朵咖啡廳",
    boss: "Tina",
    drinks: ["卡布奇諾", "黑咖啡", "珍珠奶茶"],
    customer: 20  
  },
  {
    storeName: "桑心酒吧",
    boss: "Gray",
    drinks: ["啤酒", "長島青茶", "威士忌"],
    customer: 20
  },
]

查詢型別

使用 typeof 方法

這邊先使用在原始型別的查詢上:
console.log(typeof "Alice"); //String
console.log(typeof 123); //Number
console.log(typeof true); //Boolean
console.log(typeof undefined); //Undefined
console.log(typeof null); //Object // why?
會發現 null 的結果居然是物件!
這是一個著名的 JS 錯誤,原本有被提出來要修正,但因為會影響到許多網站的正常運作,所以就將錯就錯、沒有修正了,這答案是不是很出乎意料XD
再來是物件型別的查詢:
console.log(typeof []); //Object
console.log(typeof {}); //Object
console.log(typeof function(){}); //function //why?
這邊會發現兩個問題:
  1. [ ] 和 { } 出來的結果都是 Object,要怎麼判斷它是陣列還是物件呢?
  2. 為什麼會出現 Function 型別?不屬於原始型別的,應該都會是物件型別?
所以可以發現, typeof 查詢型別的結果有時候沒那麼精準,需要搭配其他方式來查詢型別。

使用其他方法查詢型別

方法一:Array.isArray()
以此方法來判斷型別是否為陣列,是陣列的話會回傳 true,不是就回傳 false。就可以解決使用 typeof 無法看出該值是陣列或物件的問題。
console.log(Array.isArray([])); //true
console.log(Array.isArray({})); //false
方法二:Object.prototype.toString.call()
這方法只需要看最後結果就能夠正確知道型別囉!
console.log(Object.prototype.toString.call("Mina")); //[object String]
console.log(Object.prototype.toString.call(123)); //[object Number]
console.log(Object.prototype.toString.call(undefined)); //[object Undefined]
console.log(Object.prototype.toString.call(null)); //[object Null]
console.log(Object.prototype.toString.call([])); //[object Array]
console.log(Object.prototype.toString.call({})); //[object Object]
console.log(Object.prototype.toString.call(function(){})); //[object Function]
有關 JavaScript 型別的分享就到這裡,若有錯誤歡迎指正,感謝看完這篇的大家。
為什麼會看到廣告
avatar-img
7會員
30內容數
正在一點一滴學習程式,相信知識量總有一天會匯聚成大海,目前專門研究前端中。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
傑米的沙龍 的其他內容
npm 是一個套件管理工具,開發中經常需要使用第三方套件,npm 是可以用來管理很多套件的工具,這邊指的套件可能是 Library, 框架, 工具等,例如 Bootstrap, jQuery, Vue.js, babel 都可以統一由它管理。
npm 是一個套件管理工具,開發中經常需要使用第三方套件,npm 是可以用來管理很多套件的工具,這邊指的套件可能是 Library, 框架, 工具等,例如 Bootstrap, jQuery, Vue.js, babel 都可以統一由它管理。
你可能也想看
Google News 追蹤
Thumbnail
在 JavaScript 中,資料型態分為「原生值(primitive values)」和「物件(objects)」。原生值包括String、Number、Boolean、Null、Undefined、Symbol和 BigInt。物件則是包括Array和 Function等結構。
Thumbnail
此章節旨在介紹Java程式語言中的各種資料型別,包括基本型別、引用型別、集合型別、陣列型別、字典型別等。它還講解了如何在Java中進行型別轉換和自定義型別,並提供了相關的程式碼示例。
Thumbnail
本章節旨在介紹 TypeScript 的基本資料型別,包括內建型別、型別轉換、自訂型別、元組、集合、陣列、和字典型別。透過理解和使用這些型別,可以提高代碼的可讀性和可維護性。
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
這些章節的目的是為了介紹JavaScript中的各種數據類型,包括基礎類型和物件類型,以及如何將數據從一種類型轉換為另一種類型。此外,還介紹了如何創建自定義類型,以及如何使用JavaScript中的陣列、集合和字典。
Thumbnail
內容涵蓋資料型別、型別轉換、自訂型別、元組型別、集合型別和字典型別等主題。文章首先詳述內建型別如bool、byte、char等的定義和使用,接著討論型別轉換,包括隱含轉換和明確轉換。之後文章介紹自訂型別的建立,以及元組、集合、陣列和字典型別的操作與例子。
Thumbnail
針對 JavaScript 中的原始型別和隱性轉型進行了詳細的探討
Thumbnail
JS 資料型別分為兩大類,原始型別 (Primitive values) 和物件型別 (Objects)。
Thumbnail
在先前的型別文章中,我們曾經聊過 JavaScript 常用的一些型別,但針對布林這個型別,我們沒有做太多的解釋,原因在於布林值在 JavaScript 會有一個特殊的規則:自動轉型 。 自動轉型可說是讓 JavaScript 為弱型別、且難以管理的最重要的要素,接著就來讓我們來聊聊什麼是自動轉型
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。
Thumbnail
在 JavaScript 中,資料型態分為「原生值(primitive values)」和「物件(objects)」。原生值包括String、Number、Boolean、Null、Undefined、Symbol和 BigInt。物件則是包括Array和 Function等結構。
Thumbnail
此章節旨在介紹Java程式語言中的各種資料型別,包括基本型別、引用型別、集合型別、陣列型別、字典型別等。它還講解了如何在Java中進行型別轉換和自定義型別,並提供了相關的程式碼示例。
Thumbnail
本章節旨在介紹 TypeScript 的基本資料型別,包括內建型別、型別轉換、自訂型別、元組、集合、陣列、和字典型別。透過理解和使用這些型別,可以提高代碼的可讀性和可維護性。
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
這些章節的目的是為了介紹JavaScript中的各種數據類型,包括基礎類型和物件類型,以及如何將數據從一種類型轉換為另一種類型。此外,還介紹了如何創建自定義類型,以及如何使用JavaScript中的陣列、集合和字典。
Thumbnail
內容涵蓋資料型別、型別轉換、自訂型別、元組型別、集合型別和字典型別等主題。文章首先詳述內建型別如bool、byte、char等的定義和使用,接著討論型別轉換,包括隱含轉換和明確轉換。之後文章介紹自訂型別的建立,以及元組、集合、陣列和字典型別的操作與例子。
Thumbnail
針對 JavaScript 中的原始型別和隱性轉型進行了詳細的探討
Thumbnail
JS 資料型別分為兩大類,原始型別 (Primitive values) 和物件型別 (Objects)。
Thumbnail
在先前的型別文章中,我們曾經聊過 JavaScript 常用的一些型別,但針對布林這個型別,我們沒有做太多的解釋,原因在於布林值在 JavaScript 會有一個特殊的規則:自動轉型 。 自動轉型可說是讓 JavaScript 為弱型別、且難以管理的最重要的要素,接著就來讓我們來聊聊什麼是自動轉型
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。