nullとundefinedの異同

3658 ワード

一般的なデジタルコンピュータ言語には、「空」を表す値が1つしかありません.たとえば,C言語のNULL,Java言語のnull,Python言語のNone,Ruby言語のnilなどである.
しかし、JavaScript言語にはundefinedとnullの2つの「空」を表す値が表示されます.これは祖師様が私たちの遺産を残したからですね.いずれも「空」を表しているが、完全に一致していないため、面接では異同の問題がよく取り上げられる.
歴史的要因
これはJavaScriptの歴史と関係があります.1995年にJavaScriptが誕生したとき、最初はJavaのようにnullだけが「なし」を表す値として設定されていました.
C言語の伝統によればnullは自動的に0に転換できるように設計されている.
Number(null)// 0
5 + null // 5

しかし、JavaScriptの祖師爺(Brendan Eich)は、まだ足りないと思っているのは、2つの原因があります.
まずnullはJavaのようにオブジェクトとして扱われる.しかし、JavaScriptのデータ型は元のタイプと合成タイプの2つに分類され、祖師様は「なし」を表す値はオブジェクトではないほうがいいと考えています.
次に、JavaScriptの最初のバージョンにはエラー処理メカニズムが含まれておらず、データ型の不一致が発生した場合、自動変換(暗黙変換)タイプまたは黙々と失敗することが多い.祖師様はnullが自動的に0に変わると、間違いを発見しにくいと思っています.
そのため、祖先はまたundefinedを設計した.
まず違う点を見て
  • Numberタイプ変換の値が異なる
  • console.log(Number(null)); // 0
    console.log(Number(undefined)); // NaN
    
  • typeof演算出力値が異なる
  • null:nullタイプ、「空」を表し、空のオブジェクトポインタを表し、typeof演算を使用して「object」を得ます.
    undefined:undefinedタイプ.変数が初期化されていないと宣言された場合、「undefined」が得られます.
     console.log(typeof null); // 'object'
     console.log(typeof undefined); // 'undefined'
    
  • nullに設定変数またはオブジェクトはメモリコレクタによって回収される
  • .
    同じ点
  • が等しい実際、undefined値はnull値から派生し、ECMAScript規格は両者に対して等しいテストを行いtrueを返すことを規定している.すなわちjsの暗黙的変換においてif判定はfalse
  • である.
    console.log(null === undefined); // false
    

    nullはいつ、undefinedはいつ
  • nullは「オブジェクトなし」を表し、ここでは値がないはずです.例えば、1、関数としてのパラメータは、その関数のパラメータがオブジェクト2ではないことを示す、オブジェクトプロトタイプチェーンとしての終点
  • である.
  • undefinedは「欠落した値」を表し、ここでは値があるはずだが定義されていない.例えば、1、宣言された変数が値を付与していない場合はundefined 2、呼び出し関数が該当するパラメータを伝達していない場合は、対応するパラメータがundefined 3、オブジェクトの属性が値を付与していない場合はundefined 4、関数が値を返さない場合は、デフォルトでundefined
  • を返す.