JavaScript には、基本的に「存在しない」という 2 つの値があります -undefined
とnull
.
プログラマーが何も割り当てていないundefined
プロパティは になりますが、プロパティが になるnull
にnull
は、明示的に割り当てられる必要があります。
プリミティブな値であり、オブジェクトであるため、 null
becauseの必要性があると考えたことがあります。実際には、どちらもプリミティブ値です。つまり、どちらも空のオブジェクトに変換されるため、コンストラクター関数から返すことも返すこともできません (コンストラクターで失敗を宣言するにはエラーをスローする必要があります)。undefined
null
typeof null
'object'
undefined
null
また、どちらもfalse
ブール値のコンテキストで評価されます。私が考えることができる唯一の本当の違いは、一方が に評価されNaN
、もう一方0
が数値コンテキストで評価されることです。
では、なぜ両方が存在し、プロパティが設定されているかどうかを調べようとするときにundefined
誤っnull
てチェックしているプログラマーを混乱させるだけなのでしょうか?null
私が知りたいのは、代わりにnull
使用して表現できなかったものを使用する必要がある合理的な例を誰かが持っているかどうかです。undefined
したがって、一般的なコンセンサスは、undefined
「そのようなプロパティは存在しない」ことをnull
意味し、「プロパティは存在しますが、値を保持しない」ことを意味するようです。
JavaScript 実装が実際にこの動作を強制する場合、私はそれundefined
を受け入れることができますが、完全に有効なプリミティブ値であるため、既存のプロパティに簡単に割り当ててこの契約を破ることができます。したがって、プロパティが存在するかどうかを確認したい場合は、in
演算子を使用する必要がありhasOwnProperty()
ます。undefined
繰り返しになりますが、との個別の値の実用的な用途は何null
ですか?
私は実際にはundefined
、もう使用していないが、したくないプロパティの値を設定解除したいときに使用しますdelete
。null
代わりに使うべきですか?