javascript中nullとundefined区分と比較

2548 ワード

javascript中nullとundefined区分と比較
Unidefinedタイプ
Unidefinedタイプは一つの値、すなわち特殊なundefinedだけです.var宣言変数を使っていますが、それを初期化していない場合、この変数の値はundefinedです.
たとえば:

var message;
alert(message == undefined); //true
この例は変数メッセージのみを宣言していますが、初期化はされていません.この変数とundefinedの字面量を比較した結果、それらは等しいことがわかった.この例は以下の例と等価である.

var message = undefined;
alert(message == undefined); //true
この例はundefined値明示式を用いて変数messageを初期化した.しかし、私たちはこのようにする必要はありません.初期化されていない値はデフォルトでundefined値を取得します.
一般的に、一つの変数をundefined値に明示的に設定する必要がある場合はない.文字面の値undefinedの主な目的は比較ですが、ECMA-262第3版以前のバージョンではこの値は規定されていません.この値を第3版に導入したのは、空のオブジェクトポインタと初期化されていない変数を正式に区別するためです.
ただし、undefined値を含む変数は、まだ定義されていない変数とは異なります.この例を見てください.

 var message; //              undefined 
//            
// var age  
alert(message);  // "undefined"
alert(age);  //     
以上のコードを実行すると、最初の警告ボックスに変数メッセージの値、すなわち「undefined」が表示されます.第二の警告枠――alert()関数に伝達されるのは未発表の変数ageであるため、エラーが発生します.未発表の変数に対しては、typeofオペレータを使用して、データのタイプを検出する操作しか実行できません.
しかしながら、初期化されていない変数に対してtypeof演算子を実行するとundefined値に戻り、宣言されていない変数に対してtypeofオペレータを実行するとundefined値にも戻ります.次の例を見てみます.

var message; //              undefined 
//             
// var age
alert(typeof message);  // "undefined" 
alert(typeof age);  // "undefined"
その結果、初期化されていない変数と宣言されていない変数に対してtypeofオペレータはundefined値に戻ります.この結果には論理的な合理性がある.この二つの変数は技術的には本質的に区別されていますが、実際にはどの変数に対しても本当の操作ができないからです.
ヒント:
初期化されていない変数が自動的にundefined値を与えられても、明示的に変数を初期化することは賢明な選択です.これができれば、typeofオペレータが「undefined」の値に戻ると、検出された変数はまだ初期化されていないということを知っています.
Nullタイプ
Nullタイプは2番目の値のデータタイプで、この特殊な値はnullです.論理的には、null値は空のオブジェクトポインタを表していますが、これはtypeofオペレータを使ってnull値を検出したときに「object」に戻る原因です.

 var car = null;
 alert(typeof car);  // "object"
定義された変数が将来オブジェクトを保存するために用意されている場合、他の値よりもnullに初期化したほうがいいです.このように、null値を直接チェックすると、対応する変数が既にオブジェクトの参照を保存しているかどうかを知ることができます.

if (car != null){
//  car        
}
   ,undefined     null  ,  ECMA-262              true:
alert(null == undefined);  //true
ここで、nullとundefinedの間にある等しいオペレータ(=)は常にtrueに戻りますが、このオペレータは比較の目的で操作数を変換します.nullとundefinedはこのような関係がありますが、それらの用途は全く違います.前に述べたように、一つの変数の値をundefinedに明示的に設定する必要はないが、同じ規則はnullには適用されない.つまり、オブジェクトを保存しようとする変数が本当にオブジェクトを保存していない限り、その変数はnull値を明確に保存する必要があります.このようにすることは、nullを空のオブジェクトの指針とする慣例だけでなく、nullとundefinedの区別にも役立つ.
 読んでくれてありがとうございます.みなさんのご協力をお願いします.ありがとうございます.