javascript boolean型であるかを判定する

javascript boolean型であるかを判定する

javascriptで、boolean型であるかを判定するサンプルコードを記述してます。判定する方法は4種類くらいあり「Object.prototype.toString」オブジェクトを使用する方法以外はパフォーマンスは同じくらいです。

環境

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

boolean型であるかを判定

boolean型であるかを判定するには、「typeof」した結果が「boolean」であるかで判定します。

function isBoolean(v){

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

  return false;

}

console.log( isBoolean(true) ) // true
console.log( isBoolean(false) ) // true

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

単純に「true」か「false」であるかを判定しても結果は同じです。

function isBoolean(v){

  if (v === true || v === false) return true;

  return false;

}

console.log( isBoolean(true) ) // true
console.log( isBoolean(false) ) // true

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

二重否定の論理演算子である「!!」を使用して「自身」と比較する方法もあります。

function isBoolean(v){

  if (!!v === v) return true;

  return false;

}

console.log( isBoolean(true) ) // true
console.log( isBoolean(false) ) // true

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

「Object.prototype.toString」オブジェクトの[[Class]]を使用しても判定可能です。

function isBoolean(v){

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

  return false;

}

console.log( isBoolean(true) ) // true
console.log( isBoolean(false) ) // true

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

パフォーマンスは、「toString.call」以外はどれもほぼ同じです。