【JAVASCRIPT】JavaScript「truthy」と「falsy」について
JavaScriptでは、値が条件文(例えば、if 文)で真または偽として評価される場合、その値は「truthy」または「falsy」と呼ばれます。
Falsy(偽と評価される値)
次の値は、JavaScriptで常に偽(falsy)として評価されます。
false
0(ゼロ)
-0(マイナスゼロ)
0n(BigIntのゼロ)
“”(空文字列)
null
undefined
NaN(Not-a-Number)
これらの値はすべて条件文で偽と評価されます。
- if (false) {
- console.log("This will not be logged");
- }
- if (0) {
- console.log("This will not be logged");
- }
- if ("") {
- console.log("This will not be logged");
- }
Truthy(真と評価される値)
上記以外のすべての値は、JavaScriptでは真(truthy)として評価されます。
true
数値(0および-0以外のすべての数値)
文字列(空文字列以外のすべての文字列)
配列(空配列も含む)
オブジェクト(空オブジェクトも含む)
関数
Infinityおよび-Infinity
これらの値はすべて条件文で真と評価されます。
- if (true) {
- console.log("This will be logged");
- }
- if (42) {
- console.log("This will be logged");
- }
- if ("hello") {
- console.log("This will be logged");
- }
- if ([]) {
- console.log("This will be logged");
- }
- if ({}) {
- console.log("This will be logged");
- }
具体例
下記の例では、aは0なのでfalsyと評価され、bは非空の文字列なのでtruthyと評価されます。
- let a = 0;
- if (a) {
- console.log("a is truthy");
- } else {
- console.log("a is falsy"); // ここが実行される
- }
- let b = "hello";
- if (b) {
- console.log("b is truthy"); // ここが実行される
- } else {
- console.log("b is falsy");
- }
論理演算子におけるtruthyとfalsy
JavaScriptの論理演算子(&&, ||, !)は、truthyとfalsyの概念に基づいて動作します。これらの演算子は、条件文の評価や短絡評価(ショートサーキット評価)でよく使われます。
&& (論理AND)
&&演算子は、両方のオペランドがtruthyである場合にのみtruthyを返します。最初にfalsyな値が見つかった時点で、その値を返し、評価を終了します(短絡評価)。
- console.log(true && "hello"); // "hello" が返される(両方truthy)
- console.log(false && "hello"); // false が返される(最初がfalsy)
- console.log("world" && "hello"); // "hello" が返される(両方truthy)
- console.log(0 && "hello"); // 0 が返される(最初がfalsy)
|| (論理OR)
||演算子は、最初にtruthyな値が見つかった時点でその値を返し、評価を終了します。両方のオペランドがfalsyである場合は最後のオペランドを返します。
- console.log(true || "hello"); // true が返される(最初がtruthy)
- console.log(false || "hello"); // "hello" が返される(最初がfalsy、次がtruthy)
- console.log("world" || "hello"); // "world" が返される(最初がtruthy)
- console.log(0 || "hello"); // "hello" が返される(最初がfalsy、次がtruthy)
- console.log(null || undefined); // undefined が返される(両方falsy)
! (論理NOT)
!演算子は、オペランドのtruthyまたはfalsyの逆のブール値を返します。truthyな値が与えられた場合はfalseを、falsyな値が与えられた場合はtrueを返します。
- console.log(!true); // false が返される
- console.log(!false); // true が返される
- console.log(!"hello"); // false が返される("hello"はtruthy)
- console.log(!0); // true が返される(0はfalsy)
- console.log(!null); // true が返される(nullはfalsy)
短絡評価(ショートサーキット評価)
論理演算子の短絡評価の例をいくつか示します。
&&の短絡評価
&&演算子は最初にfalsyな値を見つけた時点で評価を終了します。
- let a = false && (console.log("This will not be logged"), true);
- console.log(a); // false が返される
- let b = true && (console.log("This will be logged"), true);
- console.log(b); // "This will be logged"が表示され、bにはtrueが入る
||の短絡評価
||演算子は最初にtruthyな値を見つけた時点で評価を終了します。
- let c = true || (console.log("This will not be logged"), false);
- console.log(c); // true が返される
- let d = false || (console.log("This will be logged"), true);
- console.log(d); // "This will be logged"が表示され、dにはtrueが入る
まとめ
&&演算子は、両方のオペランドがtruthyである場合にのみtruthyを返し、最初のfalsyな値を返す。
||演算子は、最初のtruthyな値を返し、両方がfalsyである場合は最後のオペランドを返す。
!演算子は、オペランドのtruthyまたはfalsyの逆のブール値を返す。
短絡評価により、評価の途中で結果が確定すると、残りの評価は行われない。