私が知っているJavaScriptのundefinedとnullの違い


undefinedとnullについては彼らの違いがたくさんあることを知っています.彼らの違いについても知っていますが、具体的なシステムはありません.そのためにまとめてみました.主な心得は以下の通りです.
それらを区別するには、まずこの二つの値が表す意味を明確にします.
  • nullはJavaScriptの字面量で、空の値を表します.即ち対象が現れないことを表します.それはJavaScriptの元の値の一つです.typeof演算を使って「object」を得ます.
  • undefinedはグローバルオブジェクトの一つの属性であり、変数が宣言されて初期化されていない場合、undefinedが得られる.
  • 具体的な表現は以下の通りです
    a;
    console.log(a);
    //Uncaught ReferenceError: a is not defined
    
    var b = null;
    console.log(b); //null
    
    それらの出現の情景もそれぞれ違っています.具体的には次のようにまとめられています.
    null:つまり空で対象がないという意味です.
  • は、関数のパラメータとして、オブジェクトではないことを表しています.
  • は対象プロトタイプチェーンの終点となります.
  • undefined:欠損値を表します.ここに値があるはずですが、定義されていません.
  • 変数が宣言されましたが、値がない場合はundefined
  • です.
  • 関数を呼び出したときに提供すべきパラメータが提供されていません.このときundefined
  • です.
  • オブジェクトには、属性が割り当てられていません.この属性値はundefined
  • です.
  • 関数は戻り値がないので、デフォルトはundefined
  • に戻ります.
    nullとundefinedの違いは主に以下の3点に現れます.
    1.値は等しいが、タイプは同じではない.
    var x;
    var y = null;
    console.log(x == y); //ture
    console.log(x ===y); //false
    
    上のコードの中で==はタイプ変換を継続し、値は等しいので、tureが得られます.一方、==ではタイプ変換が発生しないのでfalseが得られます.したがって、undefinedとnullの値は等しく、タイプは等しくない.
    2.数字の演算が異なります.
    1+null 
    //1
    
    1+undefined 
    //NaN
    これは約束の違いから決めたのです.規定の中で数字とundefinedは運算する時、結果はすべてNaNです.nullと演算する場合、nullは常に0です.
    3.具体的なやり方が違っています.
    値が存在するかどうかを判断するときは、このように書いてもいいです.
    objA.valueA === undefined 
    相手が空かどうかを判断したい時は、こう書いてもいいです.
    objA.valueA == null 
    最後に一波MDNでまとめたnullとundefinedの違いのコードを借ります.
    typeof null         // object (            'null')
    typeof undefined    // undefined
    null === undefined  // false
    null  == undefined  // true
    null === null  // true
    null == null  // true
    !null //true
    isNaN(1 + null)  // false
    isNaN(1 + undefined)  // true