===
に対し、その値と同様型比較し、厳密な等価演算子です。値null
は、ちょうど1つの値 - null
を持つヌルタイプです。
未定義は未定義型で、値も1つしかありません - 未定義です。
厳密な等価演算子を使用する場合、null!==は異なる型であるため、未定義です(厳密な等価比較アルゴリズムのステップ1、ECMA-262§11.9.6を参照)。
==
は等価演算子です。含ま抽象等価比較アルゴリズム(11.9.3§ECMA-262)を使用==
を使用して比較:
- タイプ(X)のタイプ(Y)と同じである場合、次に...
- xがnullでyが未定義の場合はtrueを返します。
- xが未定義で、yがnullの場合はtrueを返します。
したがってnull == undefined
は、定義によって真を返します。厳密には、プロパティの存在について試験は、(その値に関係なく)、hasOwnPropertyを使用する必要があります
:
if (jsonobject.hasOwnProperty('tt')) {
// property exists
}
をしかし実際に未定義ための厳格な試験に大きな違いがありません
if (jsonobject.tt === undefined)
プロパティが存在し、の値が未定義であるかどうかは、で定義されていないか、まったく定義されていないため、通常は同等です。 ===
を使用すると、ttが存在するにもかかわらず、null
の値が割り当てられている場合、上記はfalseを返します。
これはコメントであり、回答ではありません。私のコメントを追加している間、あなたの答えを卑劣に更新する。 – zzzzBov
@zzzzBov西の最速の銃を歓迎します。 – Raynos
答えとして短いスニペットを投稿すると、「最も古い」リストの一番上に来るので、より多くの票を獲得する可能性があります。それは主に私がその練習を拒否した理由です。 – zzzzBov