javascript オブジェクトであるかを判定する

javascript オブジェクトであるかを判定する

javascriptで、オブジェクトであるかを判定するサンプルコードを記述してます。判定する方法は4種類くらいありますが「toString.call」を使用した方法が「{}」のオブジェクトのみを「true」と判定することができます。

環境

  • OS windows11 pro 64bit
  • Apache 2.4.43
  • ブラウザ chrome 109.0.5414.75

オブジェクトであるかを判定

「{}」で表現されるオブジェクトは「toString.call」を使用して判定します。

function isObject(v){

  if (toString.call(v).slice(8, -1) === 'Object') return true;

  return false;

}


console.log( isObject({}) ) // true

console.log( isObject(JSON) ) // false
console.log( isObject(Math) ) // false
console.log( isObject([]) ) // false
console.log( isObject(new Error()) ) // false
console.log( isObject(new RegExp()) ) // false
console.log( isObject(new String('str')) ) // false
console.log( isObject(new Number(1)) ) // false
console.log( isObject(new Map()) ) // false
console.log( isObject(new Set()) ) // false
console.log( isObject(function() {}) ) // false
console.log( isObject(() => {}) ) // false
console.log( isObject(Symbol) ) // false
console.log( isObject(0) ) // false
console.log( isObject(1) ) // false
console.log( isObject(-10) ) // false
console.log( isObject(true) ) // false
console.log( isObject(false) ) // false
console.log( isObject(NaN) ) // false
console.log( isObject(Infinity) ) // false
console.log( isObject('<p>') ) // false
console.log( isObject(undefined) ) // false
console.log( isObject(null) ) // false

「typeof」の場合

「typeof」の場合は「null」や「配列」も「true」と判定されます。

function isObject(v){

  if (typeof v === 'object') return true;

  return false;

}


console.log( isObject({}) ) // true
console.log( isObject([]) ) // true
console.log( isObject(JSON) ) // true
console.log( isObject(Math) ) // true
console.log( isObject(null) ) // true
console.log( isObject(new Error()) ) // true
console.log( isObject(new RegExp()) ) // true
console.log( isObject(new String('str')) ) // true
console.log( isObject(new Number(1)) ) // true
console.log( isObject(new Map()) ) // true
console.log( isObject(new Set()) ) // true

console.log( isObject(0) ) // false
console.log( isObject(1) ) // false
console.log( isObject(-10) ) // false
console.log( isObject(true) ) // false
console.log( isObject(false) ) // false
console.log( isObject(function() {}) ) // false
console.log( isObject(() => {}) ) // false
console.log( isObject(Symbol) ) // false
console.log( isObject(undefined) ) // false
console.log( isObject(NaN) ) // false
console.log( isObject(Infinity) ) // false
console.log( isObject('<p>') ) // false

instanceofの場合

instanceofの場合は、関数なども「true」と判定されます。

function isObject(v){

  if (v instanceof Object === true) return true;

  return false;

}


console.log( isObject({}) ) // true
console.log( isObject([]) ) // true
console.log( isObject(JSON) ) // true
console.log( isObject(Math) ) // true
console.log( isObject(new Error()) ) // true
console.log( isObject(new RegExp()) ) // true
console.log( isObject(new String('str')) ) // true
console.log( isObject(new Number(1)) ) // true
console.log( isObject(new Map()) ) // true
console.log( isObject(new Set()) ) // true
console.log( isObject(function() {}) ) // true
console.log( isObject(() => {}) ) // true
console.log( isObject(Symbol) ) // true

console.log( isObject(null) ) // false
console.log( isObject(0) ) // false
console.log( isObject(1) ) // false
console.log( isObject(-10) ) // false
console.log( isObject(true) ) // false
console.log( isObject(false) ) // false
console.log( isObject(undefined) ) // false
console.log( isObject(NaN) ) // false
console.log( isObject(Infinity) ) // false
console.log( isObject('<p>') ) // false

「getPrototypeOf」の場合

「getPrototypeOf」の場合は、「undefined」や「null」がエラーと判定されてしまいます。

function isObject(v){

  if (Object.getPrototypeOf(v).constructor.name === 'Object') return true;

  return false;

}


console.log( isObject({}) ) // true
console.log( isObject(JSON) ) // true
console.log( isObject(Math) ) // true

console.log( isObject([]) ) // false
console.log( isObject(new Error()) ) // false
console.log( isObject(new RegExp()) ) // false
console.log( isObject(new String('str')) ) // false
console.log( isObject(new Number(1)) ) // false
console.log( isObject(new Map()) ) // false
console.log( isObject(new Set()) ) // false
console.log( isObject(function() {}) ) // false
console.log( isObject(() => {}) ) // false
console.log( isObject(Symbol) ) // false
console.log( isObject(0) ) // false
console.log( isObject(1) ) // false
console.log( isObject(-10) ) // false
console.log( isObject(true) ) // false
console.log( isObject(false) ) // false
console.log( isObject(NaN) ) // false
console.log( isObject(Infinity) ) // false
console.log( isObject('<p>') ) // false

console.log( isObject(undefined) ) // Uncaught TypeError: Cannot convert undefined or null to object
console.log( isObject(null) ) // Uncaught TypeError: Cannot convert undefined or null to object