Jimmy 的架站筆記

嗨~我是 Jimmy!我可能不是你認識的第 1 個 Jimmy,但一定是最帥的那個。


JavaScript 中各種型別的判定

By Jimmy 2025-04-21
發表於 javascript

最近在寫一些 JavaScript 的題目,才發現 JavaScript 中有些東西的型別實在是滿奇怪的,或是每個 library 或 framework 定義不同,實作出來的型別也會不同,所以稍微整理了一下在 JavaScript 中各種型別的判定。

1. Primitive Type

1.1 string

function isString(value) {
  return typeof value === 'string'
}

1.2 number

function isNumber(value) {
  return typeof value === 'number'
}

1.3 bigint

function isBigInt(value) {
  return typeof value === 'bigint'
}

1.4 boolean

function isBoolean(value) {
  return typeof value === 'boolean'
}

// or
function isBoolean(value) {
  return value === true || value === false
}

1.5 undefined

function isUndefined(value) {
  return typeof value === 'undefined'
}

// or
function isUndefined(value) {
  return value === 'undefined'
}

1.6 symbol

function isSymbol(value) {
  return typeof value === 'symbol'
}

1.7 null

function isNull(value) {
  return value === null
}

// 注意:typeof null 會是 'object',不能用來判斷是不是 null

2. Non-Primitive Type

2.1 array

function isArray(value) {
  return Array.isArray(value)
}

// 注意:typeof [] 會是 'object',不能用來判斷是不是 array

2.2 function

function isFunction(value) {
  return typeof value === 'function'
}

2.3 object

function isObject(value) {
  if (value == null) return false
	
  return typeof value === 'object' || typeof value === 'function'
}

2.4 plain object

class Student(name) {
  name
	
  constructor(name) {
    this.name = name
  }
}

const student = new Student('Jimmy')
isPlainObject(student)
// false
function Student(name) {
  this.name = name
}

const student = new Student('Jimmy')
isPlainObject(student)
// false
function isPlainObject(value) {
  if (value == null) return false
	
  const prototype = Object.getPrototypeOf(value)
  // 透過 Object.create(null) 建立的 object,其 prototype 為 null
  return prototype === Object.prototype || prototype === null
}

// 在某些框架或 library 中,class 和 function 建立的 object 也會算是 plain object,則可以用以下方法:
function isPlainObject(value) {
  return Object.prototype.toString.call(value) === '[object Object]'
}

參考資料

typeof - JavaScript - MDN Web Docs - Mozilla
Type Utilities | JavaScript Interview Questions with Solutions
Type Utilities II | JavaScript Interview Questions with …
[筆記] JavaScript 中的Plain Object - Nono’s Blog


你可能也會喜歡

JavaScript Array Methods — 陣列方法整理

JavaScript Array Methods — 陣列方法整理

陣列(array)屬於物件(object)的一種,在Javacript中有許多陣列方法(array methods)可做轉換或運算,來整理一下在看到陣列常見和相關的方法。 1. Array and String:陣列與字串的轉換 字串與陣列相關的方法 1.1 字串轉換成陣列 1.1.1 **Array.from()** 這個方法不只可以轉換字串,還可以轉換類陣列等等。 語法: > Array.f

Read More
JavaScript 效能測試的好幫手 ⏤ console.time

JavaScript 效能測試的好幫手 ⏤ console.time

記得有一次想要測試一下自己 2 種 function 寫法的效能,但當時的我連關鍵字都不知道要下什麼於是作罷,直到後來偶然看到這篇文章:,才意外發現可以用 console.time 這個語法來測試 function 的效能,以下簡單介紹一下用法。

Read More
JavaScript - 費氏數列的 3 種解法

JavaScript - 費氏數列的 3 種解法

面試的時候經常會問到怎麼用 JavaScript 解費氏數列,面試到後面整理了一下常見的 3 種解法: 首先說明一下費氏數列:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] ,通常會請你用 JavaScript 求解陣列的最後一個值。 1. JavaScript 費氏數列 - 遞迴解 2. JavaScript 費氏數列 - 迴圈解 3. JavaScript 費氏數列 - Memoization

Read More