[JavaScript] 文字列を Boolean に変換する 46 の方法

JavaScript で文字列 (String) を Boolean に変換する方法をご紹介します。

JavaScript

前提

URL パラメータや POST リクエストで渡ってきた値を Boolean 型に変更することを想定しています。

true は “1”, false は “” で扱うアプローチ

true の場合は何かしらの文字列 (この場合は “1” ) を false の場合は空文字列 “” で扱うことで !! のイディオムで Boolean に変換できます。

!!'1'; // true
!!'';  // false

true は “true”, false は “false” で扱うアプローチ

他のアプローチとしては、文字列として “true” , “false” などを完全一致して比較する方法があります。

var param = "true";
param === "true" ? true : false; // true
 
var param = "false";
param === "true" ? true : false; // false
 
var param = "";
param === "true" ? true : false; // false

個人的には Boolean 型の true, false と、文字列の “true”, “false” がパット見で区別しにくくて、視認性が下がり、バグの温床となりえると考えています。

但し、クライアントサイドに Vue.js などを利用して Boolean 型で扱っている値を、サーバーサイドに POST リクエストを送る場合はこのアプローチで変換することになると思います。

toBoolean メソッドを定義する

String 型から Boolean 型に変換する toBoolean メソッドを定義して、これを使うという方法もあります。

/**
 * Boolean を表す文字列から Boolean を返す
 *
 * s が 'true' または '1' なら true、'false' または '0' なら false、
 * そうでなければ def の値を返す
 *
 * @param {String} s  Boolean を表す文字列
 * @param {unknown} def  s が 'true' もしくは 'false' でない場合に返す値
 *
 * @return {Boolean} or def
 */
var toBoolean = function(s, def) {
  switch (s) {
    case 'true':
    case '1':
    case 'on':
      return true;
    case 'false':
    case '0':
    case 'off':
      return false;
  }
  return def;
};

まとめ

文字列型から Boolean 型への変換は、Web アプリケーションを実装すると必ず出てくると思うので Node.js のメソッドや npm module でなにか良さそうなものがあるかもしれません。

参考情報