JavaScriptでのnullとundefinedの違い

参照

JavaScript

nullの典型的な使用法

関数パラメーターとしては、関数パラメーターがオブジェクトではないことを意味します

            function myFn(obj) {
    if(null == obj) {
        // code
    }
}
        

オブジェクトプロトタイプチェーンの終わりとして

            Object.getPrototypeOf(Object.prototype);
        

変数を解放するときは、変数にnullを割り当てます

            let o={
 code:'abc'
};
o = null;
        

未定義の典型的な使用法

変数は宣言されていますが割り当てられていません。変数の値は未定義です

            let o;
console.log(o);    //undefined
        

関数が提供する必要のあるパラメーターが呼び出し時に提供されない場合、提供されないパラメーターの値は未定義です

            function myFn(o) {
    console.log(o);
}
myFn();   //undefined
        

オブジェクトに含まれていないプロパティ、値は未定義です

            let o={
 code:'abc'
};
console.log(o.name);    //undefined
        

関数が値を返さない場合、デフォルトではundefinedを返します

            function myFn(obj) {
    obj = 'a';
}
console.log(myFn());    //undefined
        

nullと未定義の類似点

ブール値に変換するとFalse

            console.log(Boolean(null));  // false
console.log(Boolean(undefined)); // false
        

nullとundefinedの違い

数値に変換すると結果が異なります。null変換の結果は有効な数値0であり、未定義の変換の結果はNaNです。

            console.log(Number(null));  // 0
console.log(Number(undefined)); // NaN
        

2つのタイプは異なり、nullのタイプはオブジェクトであり、undefinedのタイプはundefinedです。

            console.log(typeof null); //object
console.log(typeof undefined); //undefined
        

nullと未定義を比較する

nullとundefinedを区別するために、合同のみを使用できます。合同では、2つのタイプが等しいかどうかを厳密に比較します。

            console.log(Boolean(null == undefined));  // true
console.log(Boolean(null === undefined)); // false
        

総括する

上記の比較の結果、これら2つのタイプを明確に理解できました。通常、コードを書くときに変数に有効な値があるかどうかを判断するときは、2つを区別する必要はなく、ブール型として使用するだけです。ただし、プロパティが存在するかどうかを判断する必要がある場合は、型を厳密に使用して未定義を判断する必要があります。最後に、数値を渡す場合は、最初に判断する必要があり、数値型に直接キャストすることはできません。そうしないと、nullによって異常な結果が得られ、undefinedによって無効な結果NaNが直接計算されます。