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 iterate object 的時候到底有沒有順序性

一直以來,都知道 JavaScript 的 object 在 iterate 的時候並不會保證順序,也因此就一直以為是沒有順序的,直到最近仔細看了 MDN 的文件才發現其實是有某種順序性的。 這裡的順序指的是 iterate object 的順序,包含:for…in, for…of, Object.keys(), Object.values()。

Read More