

JS初心者です。  
サンプルコードを読んでいて、わからない部分が出てきて検索にも引っかからなかったため質問させてください。

[code]

    var content = (String型のオブジェクト);
    
    if(content && content !== ""){
        //処理
    }
    
[/code]

サンプルコードに上記のようなコードが出てきたのですが、if文の条件に使っている部分の意味がわかりません。  
ご教授お願いいたします。


CC BY-SA 4.0
2018-07-28T10:58:53.460
47047
2018-07-30T00:36:36.540
2018-07-28T12:10:51.850
3060
27273
question
javascript
JavaScriptで同じ変数同士の論理演算を分岐に使うことについて


contentの値が`null`や`undefined`の場合に、`false`と判定するためだと思います。

`content !== ""`のみの場合、contentの値が`null`や`undefined`だた、`true`と判定されます。  
そのため、`if`ブロック内に以下のように`.toUpperCase()`などのメソッドを使うとエラーが発生します。

[code]

    var content;     // undefinedのままにする。
    content = null;  // または, nullを設定する。
    
    if (content !== "") { // trueと判定される
      console.log(content.toUpperCase()); // ここでエラー
    }
    
[/code]

`content && content !==
""`とすれば、最初の`content`が`false`となるため、`null`や`undefined`を除外することができます。


CC BY-SA 4.0
2018-07-28T11:26:09.307
47048
2018-07-28T11:26:09.307
47047
answer


`if(content && content !== "")`の中にある`&&`は、論理AND演算子です。expr1 && expr2
とした場合、`expr1`が`false`であれば`expr1`を返し、そうでない場合は`expr2`を返します。したがって、演算対象の両方が`true`ならば`true`を返し、そうでなければ、`false`を返します。

次に、`content`の真偽はどうなるかというと、`0`, `-0`, `null`, `false`, `NaN`, `undefined`, 空文字列
(`""`)の場合に`false`になります。

右側の、`content !== ""`は、空文字列でないということです。JavaScriptの場合は、`if(content && content !==
"")`としなくても、`if(content)`だけで空文字列を除外することができます。

サンプルで`if(content && content !== "")`となっているのは、`if(content !==
"")`としてあったら`content`が`null`の時にエラーが出たので、反射的に`if(content && content !==
"")`と修正したか、他のプログラム言語の多くが`null`と`空文字列`を別にチェックする必要があるためその習慣からそのようなコードにしたものと思われます。


CC BY-SA 4.0
2018-07-28T13:25:50.887
47054
2018-07-30T00:36:36.540
2018-07-30T00:36:36.540
15171
15171
47047
answer