コードの見た感じからして、redux用の初期stateを作っているところでしょうか。
その場合だと、「error/codeは文字列またはundefinedである」と自分の中で定義してコード中でもその条件を保てるなら、初期stateをこう書いてしまうこともできます。
js
1const defaultState = {
2 isUserAuthenticated: false,
3 error: {
4 message: ''
5 }
6};
要は、undefinedであるならばキーごと書かない、と。
でもこれだとstateオブジェクトの構造がdefaultStateオブジェクトを一目見ても把握できないじゃないか、と思われるなら、「error/codeは文字列またはnullである」と定義してnullを初期値にするという方向へも行けます。
正直、undefinedはコードに持ち込みたくない存在です。
おそらくundefinedは、配列や連想配列のキーが見つからなかったときにも実行を止めずにできる限り処理が続けられるようにと用意されたオブジェクトです。しかしオブジェクトとして用意されてしまったためおかしな動きもします。
js
1var a = {key: undefined}
と書くと、aの内容は{}
でしょうか、{key: undefined}
でしょうか?
正解は後者の{key: undefined}
の方なのですが、これだめでしょ、undefinedが格納できてしまっては、配列アクセスしてundefinedが得られたとしても、最初からそのキーがなかったのかそのキーでundefinedが格納されていたのか区別つきません。
こんなおかしいundefinedを自分のコードの中には登場させたくないと考えると、せめてnullを使っていきたいなとなります。