【入門編】 ToBoolean変換のルール – JavaScript実践ガイド

こんにちは!JavaScriptの世界へようこそ。チーフアーキテクトの私です。

プログラミングを学び始めの頃って、不思議なコードの挙動に頭を抱えたり、「なんでやねん!」と画面に向かってツッコミを入れたくなったりすること、ありますよね。大丈夫です、そのモヤモヤは誰もが通る「エンジニアの登竜門」ですから安心してください。

今日は、そんなJavaScriptの数ある「お約束」の中でも、特に初学者がドハマりしやすい「ToBoolean(トゥ・ブーリアン)変換」について、おしゃべりするように楽しく、かつ実務で役立つレベルまで深く紐解いていきましょう。

—

そもそも「ToBoolean変換」ってなに?

JavaScriptを書いていると、「もし〜だったら」という条件分岐(`if`文など)をめちゃくちゃ頻繁に使いますよね。

if (user) {
// ユーザーがいるときの処理
}

このとき、`if`のカッコの中身は、最終的に「本当(`true`)」か「嘘(`false`)」のどちらかにパキッと判断される必要があります。
でも、実務の現場では、文字列や数値、果てにはオブジェクトなど、さまざまなデータ型がこのカッコの中に放り込まれます。

ここでJavaScriptのエンジンが裏側で発動させるのが、「勝手に真偽値っぽく解釈してやるぜ!」という変換ルールです。これが「ToBoolean変換」の正体です。

—

嘘つきな値(Falsy)たちを覚悟せよ

まずは、JavaScript界において「お前は嘘(`false`)だ!」と判定されてしまう、悲しき仲間たちをご紹介します。
通称「Falsy(フォルシー)」と呼ばれる値たちです。

実は、このFalsyな値は全部でたったの7つしかありません。これだけ覚えれば、JavaScriptの判定マスターに一歩近づけます。

1. `false` (そのまま偽)
2. `0` (数値のゼロ)
3. `-0` (マイナスのゼロ)
4. `0n` (BigIntのゼロ)
5. `””` または `”` (中身が空っぽの文字列)
6. `null` (「何もない」ことを表す値)
7. `undefined` (「まだ値が定義されてません」という状態)
8. `NaN` (Not a Number:計算エラーなどの「数値じゃないもの」)
※(厳密には7つ+αですが、実務上はこの仲間たちを「空っぽや無効なもの」として捉えておけばOKです!)

身近な例えで考えてみよう

お財布の中身を想像してみてください。

  • お金が「0円」
  • お財布自体が「ない(`null`)」
  • お財布を開けたら中身が「空っぽ(`””`)」

これらはすべて、現実世界でも「お買い物できません=無い(`false`)」ですよね。JavaScriptのFalsyたちも、これと同じように「中身が空っぽ・存在しない・無効」という共通のイメージを持っています。

—

トラブル続出!「オブジェクトは常にtrue」の罠

さて、ここからが本日の本丸、そして一番つまずきやすいポイントです。

JavaScriptでは、配列(`[]`)や連想配列のようなオブジェクト(`{}`)を作ることができますよね。
ここで、初学者の多くが以下のような罠にハマります。

「空っぽの配列なんだから、中身ないし、`false`判定になるはず……?」

const emptyArray = []; // 中身が何もない空っぽの配列

if (emptyArray) {
console.log(“あれっ、動いちゃった!?”);
}

結果はなんと、「あれっ、動いちゃった!?」がコンソールに表示されます。

そう、JavaScriptの世界では、どんなに中身が空っぽの配列(`[]`)であっても、オブジェクト(`{}`)であっても、存在しているだけで問答無用で「`true`(本当)」になります。

なぜオブジェクトは常に「true」なのか?

イメージしてみてください。
ダンボール箱を想像してください。中身が空っぽのダンボール箱でも、「ダンボール箱という物体そのものは、そこに確実に存在していますよね?」

JavaScriptは、「うーん、中身が空かどうかは置いといて、そこに『オブジェクトという箱』がポツンと置いてあるから、存在としてはアリ(`true`)だな!」と判断してしまうのです。

実務の現場でも、「APIからデータが空の配列で返ってきたから、`if (data)`で弾けるはずだ!」と思ってこの罠にハマり、画面がバグるという事故が後を絶ちます。
配列やオブジェクトの中身が空かどうかを調べたいときは、`if (emptyArray)`ではなく、`if (emptyArray.length > 0)` のように、ちゃんと中身の長さをチェックしてあげましょうね。

—

明示的に変換してみよう:`Boolean()` と `!`(否定演算子)

「じゃあ、目の前の値が本当に `true` なのか `false` なのか、強制的に白黒つけたい!」というときは、以下の2つの方法を使います。

1. `Boolean()` 関数を使う

その名の通り、引数に渡した値を無理やり真偽値に変換します。

console.log(Boolean(“こんにちは”)); // 文字列があるので -> true
console.log(Boolean(0)); // 0 は Falsy なので -> false
console.log(Boolean({})); // オブジェクトは例外なく -> true

2. 「!」(論理否定演算子)を2回重ねる(!!hoge)

実務のコードを見ていると、`Boolean()` よりも `!!`(ドット・ドットじゃなくて、ビックリマーク2つ!)を見かけることが多いかもしれません。

「!」は「真と偽をひっくり返す」という意味なので、2回重ねることで「元の真偽値を維持したまま、強制的にBoolean型に変換する」というテクニックとして使われます。

const username = “Taro”;

// username が存在するかどうかを、スッキリしたBoolean型(true/false)で取得する
const hasUser = !!username;

console.log(hasUser); // true

—

まとめ:優しく寄り添うJavaScriptのルール

JavaScriptの型変換は、最初は「なんで勝手に変えるのさ!」とイライラしてしまうかもしれませんが、慣れてくるとコードをスッキリ書くための強力な味方になってくれます。

今日のポイントをギュッと凝縮すると、こうです。

  • Falsy(嘘つきな値)は、0、””、null、undefined、NaNなどの「空っぽ・無効」な仲間たち(全7種類ほど)。
  • 配列やオブジェクトは、中身が空っぽでも「箱が存在する」というだけで問答無用で `true` になる!
  • 中身の有無をきっちり調べたいときは、`if (arr.length > 0)` のように具体的に書くのがプロの技。

最初は戸惑うことも多いですが、一つひとつ紐解いていけば必ず理解できます。焦らず、自分のペースでコードを書いて試してみてくださいね。あなたのプログラミングライフを、チーフアーキテクトとしてこれからも応援しています!

コメント

タイトルとURLをコピーしました