JSの中でUnidefinedとNull秒は分かります.
3086 ワード
undefined:
undefinedの文字の意味は、未定義の値です.
この値の意味は、動作の結果ではなく、変数の最も原始的な状態を表したいということです.この原始状態は以下の4つのシーンに現れる.
【1】変数を宣言しましたが、値は与えられませんでした.
【3】関数は、形参を定義していますが、実際の参を伝えていません.
【4】voidを使った表現の評価
したがって、undefinedは通常、ある表現の最も原始的な状態値から来ています.人為的な操作の結果ではありません.もちろん、あなたも手動でundefined変数に値を与えることができますが、このようにすると意味がありません.変数の値が与えられないのはundefinedです.
null
nullの文字は、空の値という意味です.この値の意味は、一つの変数の元の状態ではなく、一つのオブジェクトが人工的に空のオブジェクトにリセットされることを意味します.メモリ内の表示とは、スタック内の変数がスタック内のメモリオブジェクトを指していないということです.
オブジェクトがnullの値を与えられた後、元のオブジェクトはメモリの中で自由状態になり、GCは選択機で対象を回収し、メモリを解放します.したがって、オブジェクトをリリースする必要がある場合は、変数をnullに設定します.つまり、オブジェクトが空になっていて、現在は無効な状態です.
nullに関するもう一つの問題は説明が必要です.
一つの言葉で両者の違いをまとめると、undefinedは一つの変数が自然で、最も原始的な状態値を表し、nullは一つの変数が元の状態ではなく人工的に空のオブジェクトに設定されることを表します.したがって、実際の使用過程では、変数によって表される意味を保証するために、一つの変数の明示的な割当値undefinedを使用しないでください.一つのオブジェクトを解放する必要がある場合、直接にnullを賦与すればいいです.
undefinedの文字の意味は、未定義の値です.
この値の意味は、動作の結果ではなく、変数の最も原始的な状態を表したいということです.この原始状態は以下の4つのシーンに現れる.
【1】変数を宣言しましたが、値は与えられませんでした.
var foo;
console.log(foo); // undefined
【2】訪問先に存在しない属性console.log(Object.foo); // undefined
var arr = [];
console.log([0]); // undefined
Objectオブジェクト上のfoo属性にアクセスし、undefinedに戻り、Object上に存在しない、またはfooという属性が定義されていないことを表します.配列中の要素は、内部でも対象属性に属しています.この属性にアクセスすると、undefinedに戻ります.配列中にこの要素が存在しないことを表します.【3】関数は、形参を定義していますが、実際の参を伝えていません.
// a
function fn(a) {
console.log(a); // undefined
}
fn(); //
関数fnは、モダリティaを定義しているが、fnが呼び出されたときには伝達パラメータがないので、fnが実行するときのパラメータaは元の未割り当て変数である.【4】voidを使った表現の評価
void 0 ; // undefined
void false; // undefined
void []; // undefined
void null; // undefined
void function fn(){} ; // undefined
ECMAScriptでは、voidオペレータが任意の表現に対して要求値をundefinedに返すことを明確に規定しています.これは関数が操作を実行した後、戻り値が返されない作用と同じです.JavaScriptの関数には戻り値があります.リセット操作がない場合、デフォルトで元の状態値に戻ります.この値はundefinedです.関数の戻り値は定義されていません.したがって、undefinedは通常、ある表現の最も原始的な状態値から来ています.人為的な操作の結果ではありません.もちろん、あなたも手動でundefined変数に値を与えることができますが、このようにすると意味がありません.変数の値が与えられないのはundefinedです.
null
nullの文字は、空の値という意味です.この値の意味は、一つの変数の元の状態ではなく、一つのオブジェクトが人工的に空のオブジェクトにリセットされることを意味します.メモリ内の表示とは、スタック内の変数がスタック内のメモリオブジェクトを指していないということです.
オブジェクトがnullの値を与えられた後、元のオブジェクトはメモリの中で自由状態になり、GCは選択機で対象を回収し、メモリを解放します.したがって、オブジェクトをリリースする必要がある場合は、変数をnullに設定します.つまり、オブジェクトが空になっていて、現在は無効な状態です.
nullに関するもう一つの問題は説明が必要です.
typeof null == 'object'
nullは自分のタイプNullがあって、Objectタイプではなく、typeofがObjectタイプと判定したのは、JavaScriptデータタイプが下の層ではバイナリで表されているためで、バイナリの上位3桁は0でtypeofで判定され、nullのバイナリビットは0であるため、nullはObjectタイプと誤って判断されます.000 - ,
1 - , 31
010 - ,
100 - ,
110 - ,
実は、nullの本当のタイプは別の方法で取得できます.Object.prototype.toString.call(null) ; // [object Null]
Objectプロトタイプ上のtoString()法によりJavaScript内のオブジェクトの実際のデータタイプを取得することができます.もちろんundefinedタイプもこのように取得することができます.
Object.prototype.toString.call(undefined) ; // [object Undefined]
類似性はundefinedとnullの意味と場面が異なるが、それらはいずれも無効な値を表している.したがって、JSでこれらの値に属性を訪問すると、異常な結果が得られます.null.toString(); // Cannot read property 'toString' of null
undefined.toString(); // Cannot read property 'toString' of undefined
ECMAScript仕様は、nullとundefinedの行為が似ている上に、無効な値を表していると考えています.それらの表現内容も類似性があります.undefined == null; // true
データの種類を変換してこの結論を説明しようとしないでください.Number(null); // 0
Number(undefined); // NaN
//等しくなる前に、nullは他のタイプに変換されませんでした.null == 0 ; //false
しかし===はfalseに戻ります.全体の操作==が等しい場合は、項目のデータタイプを自動的に変換しません.両者は同じタイプではありません.undefined === null; // false,
undefined !== null; // true,
締め括りをつける一つの言葉で両者の違いをまとめると、undefinedは一つの変数が自然で、最も原始的な状態値を表し、nullは一つの変数が元の状態ではなく人工的に空のオブジェクトに設定されることを表します.したがって、実際の使用過程では、変数によって表される意味を保証するために、一つの変数の明示的な割当値undefinedを使用しないでください.一つのオブジェクトを解放する必要がある場合、直接にnullを賦与すればいいです.