JavaScript浅析--nullとundefined

4230 ワード

JavaScriptには7つのデータタイプがあり、6つの基本データタイプNumber、String、Boolean、Undefined、Null、Symbol(ES6 )があり、1つの複雑なタイプObjectがある.UndefinedおよびNullは他のものとは違って、それらは一つの一意の値しかないので、それぞれundefinedおよびnullである.何が違いますか?なぜ基本タイプにはこの二つが必要ですか?どんな効果がありますか?詳しく聞いてください.
一、違います
意味的には明確な違いがあります.
  • undefinedは、変数が初期化されていないことを示している.
  • nullは、変数が初期化されたことを表し、値は空の値を与えられる.
  • 1.undefinedUndefinedタイプは唯一の値undefinedだけで、undefinedが現れた場合は、次の3つがあります.(1)変数を宣言したが、初期化は行われていません.例えば、関数に戻り値が指定されていないデフォルトreturn undefinedは、関数パラメータが参照されていなくても、デフォルトでundefinedなどに初期化されます.
    var value;
    value; // undefined
    
    (2)アクセスが存在しないオブジェクト属性もundefinedに戻る.
    var obj = {value: 1};
    obj.content; // undefined
    delete obj.value;
    obj.value; // undefined
    
    (3)void演算子求償値は、後の式の結果の多少にかかわらずundefinedに戻ります.
    void (1 + 2); // undefined
    
    aタグのデフォルトのジャンプをブロックするとき、href="javascript:void 0"という書き方がよくあります.この文の中のjavascript:の後ろには他のjs実行可能なステートメントがあり、後の実行結果をhrefに与えてもいいです.undefinedに戻ると、ジャンプしません.ここで利用されるのもvoid演算子がundefinedに戻る原理である.
    *明示的にundefinedを他の変数に割り当てることができますが、このようなことは無意味であり、提案されていません.また、宣言されていませんが、初期化されていない変数のデフォルトはundefinedです.再割当は必要ありません.
    2.nullNullタイプも唯一の値nullだけであり、空のオブジェクトポインタを表しています.オブジェクトはすべて参照タイプで、変数は一般的にオブジェクトのポインタアドレス値で、実際のオブジェクトの内容はアドレス値が指すブロックメモリがあります.nullは空のポインタであり、メモリを指していません.存在しないオブジェクトを表しています.以下の3つの場合は、nullに戻ります.(1)戻りたい変数タイプがオブジェクトで、このオブジェクトが見つからない場合は、nullに戻ります.
    //                  null
    document.getElementById('example'); // null
    
    (2)プロトタイプチェーンの終端はnullである.Object.prototypeのプロトタイプを取得するとnullに戻る.
    Object.getPrototypeOf(Object.prototype); // null
    
    (3)他の自己割当値nullの変数にアクセスする.
    var content = null;
    content; // null
    
    *使用シーン:
  • は、オブジェクトを保存するために変数を使用したいが、まだ具体的な内容がない場合、nullに初期化することができる.
  • 回収したいデータについては、nullに指定して参照を解除してもいいです.すぐに回収しないように注意してください.実行環境から逸脱させるだけです.jsのゴミ回収メカニズムは、次回実行時に実行環境から離脱した変数を自動的に消去します.
  • 判断する
    1.undefinedundefinedの検出方式には、typeof(文字列形式)に戻りますか?
    var value;
    typeof value; // "undefined"
    typeof content; // "undefined",               ,               typeof,       not defined
    
    (2)"undefined"undefinedと比較し、===に戻るか否かを判断する.
    var value;
    value === undefined; // true
    content === undefined; //   ,Uncaught ReferenceError: content is not defined
    
    その中の第二の方法は2点に注意します.
  • 法2で使用されるtrueは、実際には値undefinedではなく、大域変数undefinedである(実際にはすべての直接人為的使用window.undefinedはアクセスundefinedである).ただし、window.undefinedの値はちょうどwindow.undefinedであり、ES 5の後にこの属性の書き換えは許されない.
  • undefinedは文字を保留していないし、意外にも実際には変数を宣言することができます.undefinedという名前を自由に与えられています.このように使い方は正確ではありません.
  • function test() {
      var value;
      var undefined = 'hello';
      console.log(value === undefined); // fasle
    }
    test(); //                    undefined           window   ,  window.undefined           ,               undefined 
    
    改善された方法は、システムを直接使用して返されるundefinedである.undefinedの関数、return、または直接void 0などがない.
    function test() {
      var value;
      var undefined = 'hello';
      console.log(value === window.undefined); // true
      console.log(value === void 0); // true
    }
    test();
    
    2.nullwindow.undefinedの検出方法は、null===に戻るかどうかを直接判断する.厳密には(3等)に等しいので、trueundefined == nullに戻り、trueは予約文字であるので、nullは変数の随意な割り当てが定義される心配はない.
    var obj = null;
    obj === null; // true
    
    nullについては、nullを使用して、typeofが戻ってくるのはtypeof nullです.