【JavaScript（loadash）】値があるかどうかを判定する関数チートシート

## 1.  はじめに
　今まで、null判定・undefined判定などの値があるかどうかを判定するロジックに悩むことが多かったので、メモ書きとしてまとめていたもの＋調査したものを公開していきます。
　今回はJavaScript編です。今でもよく使っているloadash関数を使った方法をまとめました。

## 2. lodashによる値存在判定
※型定義が分かりやすいようにAngularの書き方で書いています。

### ①	_.isNull()
Java・SpringBootなどのisNullメソッドと同様、nllかどうかを判定します。null以外はfalseになります。

```javaScript
    null_sentence : string = null;
    
    // 結果：nullです
    if (_.isNull(null_sentence)) {
       System.out.print("nullです。");
    }
```

###②_.isUndefined()
関数にあるようにundefinedかどうかを判定します。それ以外の値に関してはfalseを返します。

```javaScript
    undefined_sentence : string = undefined;
   
    // 結果：undefinedです
    if (_.isNil(undefined_sentence )) {
       System.out.print("undefinedです。");
    }
```

### ③_.isNil()
nullかundefinedかどうかを判定します。それ以外の値に関してはfalseを返します。

```javaScript
    null_sentence : string = null;
    undefined_sentence : string = undefined;
    empty_sentence : string = "";
   
    // 結果：nullです
    if (_.isNil(null_sentence)) {
       System.out.print("nullです。");
    }

    // 結果：undefinedです
    if (_.isNil(undefined_sentence )) {
       System.out.print("undefinedです。");
    }

    // 結果：何も返さない
    if (_.isNil(empty_sentence)) {
       System.out.print("空文字です。");
    }
```

### ④_.isEmpty()
値が空かどうかを判定します。
ただし、数字・真偽値でも空判定されます。
（筆者はその仕様を知った時「と゛お゛し゛て゛た゛よ゛お゛お゛お゛！」とリアルで叫びました。）
また、半角スペースはfalseで返ります。

```javaScript
    null_sentence : string = null;
    undefined_sentence : string = undefined;
    empty_sentence : string = "";
    number_value : number= 1;
    boolean_value : boolean = false;
    array_value : string[] =  [];
    object_value :  Object =  {};

    space_sentence : string = " ";
   
    // 結果：nullです。
    if (_.isEmpty(null_sentence )) {
       System.out.print("nullです。");
    }

    // 結果：undefinedです。
    if (_.isEmpty(undefined_sentence )) {
       System.out.print("undefinedです。");
    }

    // 結果：空文字です。
    if (_.isEmpty(empty_sentence )) {
       System.out.print("空文字です。");
    }

    // 結果：1ですが空です。
    if (_.isEmpty(number_value )) {
       System.out.print("1ですが空です。");
    }

    // 結果：falseですが空です。
    if (_.isEmpty(boolean_value )) {
       System.out.print("falseですが空です。");
    }

    // 結果：空の配列です。
    if (_.isEmpty(array_value )) {
       System.out.print("空の配列です。");
    }

    // 結果：空のオブジェクトです。
    if (_.isEmpty(object_value )) {
       System.out.print("空のオブジェクトです。");
    }

    // 結果：何も返さない
    if (_.isEmpty(space_sentence )) {
       System.out.print("半角スペースです。");
    }
```

| 引数 | 引数(コード) | _.isNull() | _.isUndefined() | _.isNil() | _.isEmpty() | 
|----|----|----|----|----|
| null | null | **true** | false  | **true** | **true** |
| undefined| ''  | false |  **true**  | **true** | **true** |
| 空文字 | ''  | false |  false | false  | **true** |
| 数字（0）| 0 | false |  false | false  | **true** |
| 数字（1）| 1 | false |  false | false  | **true** |
| 真偽値（true）| true | false |  false | false  | **true** |
| 真偽値（false）| false | false |  false | false  | **true** |
| 空の配列 | [] | false | false |  false  | **true** |
| 配列 | [0,1,2] | false | false |  false  | **true** |
| 空のオブジェクト| {} | false | false |  false  | **true** |
| オブジェクト | {0,1,2} | false | false |  false  | **true** |

## 3.さいごに
今回の記事は以上です。
次回のテーマは未定ですが、何かしら考えます。
よろしくお願いします。

## 4.参考資料
①[lodashの真偽値判定まとめ](https://qiita.com/okaponta_/items/83e06afde5508541edaa)
②[[Javascript] Lodashによる空判定の返り値まとめ](https://zenn.dev/1stscratch/articles/b1b2024359e57b)