JavaScript で文字列 (String) を Boolean に変換する方法をご紹介します。
URL パラメータや POST リクエストで渡ってきた値を Boolean 型に変更することを想定しています。
true の場合は何かしらの文字列 (この場合は “1” ) を false の場合は空文字列 "" で扱うことで !! のイディオムで Boolean に変換できます。
!!'1'; // true
!!''; // 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 リクエストを送る場合はこのアプローチで変換することになると思います。
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 でなにか良さそうなものがあるかもしれません。