65705


以下の例で `null`, `undefined`, 空文字列のいずれを返す実装が適切でしょうか。  
vuexのstoreのgetter内です。

[code]

    const getters = {
      partnerMst: (state) => (!state.partner_mst ? [] : state.partner_mst),
      publicGroupMst: (state) => {
        return !state.public_group_mst ? [] : state.public_group_mst
      },
      getPartnerRecordByCode: (getters) => (codeId) => {
        const targetMst = getters.partnerMst()
        return !targetMst
          ? {}
          : targetMst.find((item) => item.partner_company_id === codeId)
      },
      getPartnerNameByCode: (getters) => (codeId) => {
        const targetRecord = getters.getPartnerRecordByCode(codeId)
        return !targetRecord ? null : targetRecord.company_name
        // ここで targetRecord が空の場合、
        // null, undefined, 空文字のいずれを返すべきか？
    
      },
      getPublicGroupRecordByCode: (getters) => (codeId) => {
        const targetMst = getters.publicGroupMst()
        return !targetMst ? {}
      }
    }
    
[/code]


CC BY-SA 4.0
2020-04-17T01:33:29.117
65698
2020-04-17T06:26:28.013
2020-04-17T03:17:49.817
32986
39666
question
javascript vue.js nuxt.js
文字列を返すメソッドで値がない場合、 null / undefined / 空文字列のいずれを返すべきか


私の場合は空文字で返すことが多いです。  
もし代入されていないことを表現したい場合はnullを使います。undefinedは自分から利用はしません。

Javascriptの場合はstringであってもオブジェクトですので、プロパティもありますしいくつかのメソッドも存在します。  
つまりstring型で返さないと、それらのプロパティやメソッドはnullやundefinedが渡ってきた場合、存在しないプロパティを参照したりメソッド実行時エラーが起きる可能性があります。  
[参考](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String)

もちろん毎回型チェックを入れるという処理になっているもしくは、空文字と代入されていないことを区別したいという場合は利用したりしますが、特にそのような制約がない場合は空文字を使います。

さらに、nullとundefinedをどちらを使うかというと、明示的にオブジェクトが存在しないという場合はnullでundefinedはどちらかというと、意識せずに発生してしまったものという認識です。（例えば変数の初期化忘れやreturnのない関数の戻り値を代入したりですね）  
あとは[nullとundefinedの違い](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/null#Difference_between_null_and_undefined)あたりを見てもらえるとよいかなと思います。


CC BY-SA 4.0
2020-04-17T06:26:28.013
65705
2020-04-17T06:26:28.013
22665
65698
answer