アルアカ - Arcadia Academia

Arcadia Academiaは「エンジニアリングを楽しむ」を合言葉に日本のデジタル競争力を高めることをミッションとするテックコミュニティです。

TypeScriptにおけるBoolean(”false”)がtrueになる理由

Featured image of the post

TypeScriptは、JavaScriptを基にした強力な型システムを備えたプログラミング言語です。そのため、TypeScriptでもJavaScriptの基本的な動作をしっかりと理解しておくことが重要です。特に、データ型変換の挙動に関連するコードは、多くのエンジニアが誤解しやすいポイントです。今回は、その一例として「Boolean("false")trueになる理由」を解説していきます。

1. Boolean関数とは?

JavaScriptとTypeScriptには、値を明示的に真偽値(boolean型)に変換するためのグローバル関数Boolean()があります。この関数は、引数として与えられた値をtruefalseのいずれかに変換します。Boolean()は非常にシンプルな挙動で、次のように動作します。

  • falseとなる値(Falsy values)

    JavaScriptにおいて、いくつかの値はfalseとして評価されます。これを「falsy」な値と呼びます。以下がその代表的な例です:

    • false
    • 0(数値ゼロ)
    • ''(空文字列)
    • null
    • undefined
    • NaN(Not-a-Number)
  • trueとなる値(Truthy values)

    上記以外のすべての値は「truthy」な値とみなされ、Boolean()関数に渡すとtrueが返されます。

2. Boolean("false")trueになる理由

Boolean()関数の動作について理解したところで、Boolean("false")trueを返す理由について説明しましょう。

まず、引数として渡される"false"は、文字列です。JavaScriptでは、文字列が空でない限り、Boolean()関数はその文字列をtrueとして扱います。つまり、文字列の中身が「false」という単語であっても、それはあくまで「文字が存在する」という事実からtrueと評価されます。

この挙動を確認するためのコードは以下の通りです:

console.log(Boolean("false")); // true
console.log(Boolean("true"));  // true
console.log(Boolean(""));      // false

この結果からわかるように、"false"という文字列も、他の文字列と同様に「空でない文字列」として扱われ、trueが返されるのです。

3. なぜこの挙動が誤解を招くのか?

Boolean("false")というコードは、一見するとfalseを期待してしまいがちです。これは、文字列の内容にfalseという単語が含まれているため、直感的に「これはfalseなのでは?」と思ってしまうからです。しかし、JavaScript(およびTypeScript)では、文字列の内容にかかわらず、空でない文字列は常にtrueとして評価されます。

この誤解は、プログラムのロジックにバグを引き起こす可能性があります。たとえば、次のような条件式を書いた場合、予想とは異なる結果が得られることになります。

let value = "false";
if (Boolean(value)) {
    console.log("この値はtrueです");
} else {
    console.log("この値はfalseです");
}
// 出力: この値はtrueです

4. 解決策:文字列を明示的に比較する

このような誤解を避けるためには、Boolean()関数に頼るのではなく、文字列を明示的に比較する方法を取るべきです。もし文字列"false"falseとして扱いたい場合、次のように文字列の値そのものをチェックするコードを書くと良いでしょう。

let value = "false";
if (value === "false") {
    console.log("この値はfalseという文字列です");
} else {
    console.log("この値はtrueです");
}
// 出力: この値はfalseという文字列です

また、変数がtruefalseという文字列でない場合にも対応するため、より包括的な条件式を作成することもできます。

let value = "false";
if (value === "true") {
    console.log("この値はtrueという文字列です");
} else if (value === "false") {
    console.log("この値はfalseという文字列です");
} else {
    console.log("この値はtrueまたはfalseではない文字列です");
}
// 出力: この値はfalseという文字列です

5. まとめ

Boolean("false")trueを返す理由は、JavaScript(およびTypeScript)が文字列の内容に関係なく、空でない限りそれをtrueとして評価するからです。これは、プログラマにとって直感的ではない場合があり、誤解を招くことがあるため、ロジックを組む際には特に注意が必要です。

文字列の内容をチェックしたい場合は、Boolean()を使わず、===演算子などで明示的に文字列比較を行うことが推奨されます。このような小さな違いを理解し、正しいコードを書けるようにすることが、バグの少ない安定したアプリケーションを作成するための第一歩となります。

あなたを爆速で成長させるメンタリングプログラムはこちらから↓↓

RUNTEQ(ランテック) - 実践型Webエンジニア養成プログラミングスクールの入会