ReactやNextを学ぶうちに「この型とこの方は同じじゃないの?」と言った疑問が湧いて湧いて前に進めなくなったので、整理しました。
null型 is 何
C言語なんかでは、nullはポインタのアドレスをリセットしたいときに使います。
0でも空文字でもなく、「ない」を宣言するための言葉です。
プログラミングではnullはリテラルで(その文字列そのものに意味がある)、
変数が箱に例えられる一方で、リテラルは中身そのものです。
下記のサイトのお盆の例えがわかりやすいかも。
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
ただし、使う言語で微妙にニュアンスが違っていています。
データベースなどで使用するときは、初期値がnullだと記憶しています。(自分は未記入って意味だと解釈してます)
じゃぁTypescriptではどうなのでしょう。
Typescriptではnullはプリミティブ型の値の一つで下記の意味になります。
null = 現在利用できない、代入する値がない
空っぽじゃないのか。
「現在利用できない == 見つけられなかった == undefined(見つからない)」じゃないの?
undefinedも一緒に情報を整理する必要がおきそうです。
undefined id 何?
undefinedは初期値がなかったり、アクセスした要素が見つからなかったときに自動的に付与されます。
要は「あると思って取得に行ったけど、見つかりませんでした」ってことでしょうか。
混乱がひどくなってきたので、nullと比較してみます。
■null
- 自然発生しない
- リテラル扱いである
- typeof演算子で見るとobjectとして扱う
- Typescript開発ガイドラインで使用を推奨していない
- isNaNで見るとfalse
- JSONで設定できる
- 代入する値が存在しない(代入する行為が行われない)
■undefined
- 自然に発生する
- 変数扱いである
- typeof演算子ではundefinedとして扱う
- Typescript開発ガイドラインで使用を推奨されている
- isNaNで見るとtrue
- JSONで設定できない
- 代入されていない(入るはずだったのに入ってない)
【TypeScript】nullとundefinedを改めて整理する -Zenn
https://typescript-jp.gitbook.io/deep-dive/recap/null-undefined
nullとundefined TYpescript Deep Dive 日本語版
https://typescriptbook.jp/reference/values-types-variables/undefined-vs-null
undefinedとnullの違い -サバイバルTypescript
複数のサイトで、「特にこだわりがないならundefinedがいい」という書き込みがありました。
確かに、学習コストとパフォーマンス的には、深掘りしてもコスパがわるい箇所かもしれません。
一旦は頭に入れておいて、Typescriptにもっと馴染んでからまた再考したいです。