ホームページ > 記事 > ウェブフロントエンド > JavaScript_javascript テクニックにおけるプリミティブ データ型 Null および Unknown の詳細な説明
JavaScript のプリミティブ データ型について議論するとき、ほとんどの人は文字列、数値、ブール値までの基本を知っています。これらのプリミティブ型は非常に単純で、常識のように動作します。ただし、この記事では、ユニークなプリミティブ データ型である Null と Unknown、およびそれらが非常に似ていながらも矛盾している理由に焦点を当てます。
1. Null と未定義について理解する
JavaScript では、null は言語のリテラルおよびキーワードであり、認識できないオブジェクト値を表すために使用されます。つまり「価値がない」という意味で使われます。似ていますが、未定義は実際には値が存在しないことを表します。これらは完全に不変であり、プロパティやメソッドを持たず、プロパティに値を割り当てることもできません。実際、プロパティにアクセスまたは定義しようとすると、TypeError が発生します。名前が示すように、これらは完全に無効な値です。
値なしで表されるブール値は false です。これは、if ステートメントなどの条件付きコンテキストで false と評価されることを意味します。等価演算子 (==) を使用して、これら 2 つの値を他の false 値と比較します。それらは、それ自体を除いて等しくありません:
null == 0; // false undefined == ""; // false null == false; // false undefined == false; // false null == undefined; // true
ただし、その他の類似点として、null と unknown は同等ではありません。それぞれは独自の型の一意のメンバーであり、unknown は未定義型、null は Null 型です。以下に示すように、型と値の両方が等しい必要がある等価演算子 (===) を使用して、これら 2 つの値を比較します。
undefined === null; // false
2. 未定義を生成
未定義の値を含むコードを生成するには、さまざまな方法があります。通常、存在しない値にアクセスしようとしたときに発生します。この場合、JavaScript のような動的で型付けが弱い言語では、エラーが発生するのではなく、デフォルトで未定義の値が返されます。
初期値なしで宣言された変数は、デフォルト値が未定義になります:
var foo; // 默认值为 undefined
var array = [1, 2, 3]; var foo = array.foo; // foo 属性不存在, 返回 undefined var item = array[5]; // 数组中没有索引为5的项,返回 undefined
var value = (function(){})(); // 返回 undefined
(function(undefined){ // 参数是 undefined })();
function isUndefined(obj){ return obj === void 0; }
'undefined' in window; // true
3. Null の使用例
null の使用例は、null を異なるものにする主な側面です。未定義とは異なり、null はより便利であると考えられているからです。 typeof 演算子が null 値に適用されると「object」を返すのはこのためです。元の理論的根拠は、プレースホルダーと同様に、null オブジェクトが予期されるため、null 参照が通常使用されるというものであり、現在でもそうです。 typeof のこの動作はバグとして確認されており、修正が提案されましたが、下位互換性のために変更されていません。
このため、JavaScript 環境では値を null に設定することはなく、プログラムで行う必要があります。 MDN のドキュメントには次のように書かれています:
API では、オブジェクトが取得される場所で null が予期されることがよくありますが、関連するオブジェクトはありません。
これは、言語に依存せず、ECMAScript 仕様の範囲外である DOM に適用されます。これは外部 API であるため、存在しない要素を取得しようとすると、未定義ではなく null 値が返されます。
一般に、不変の値を変数またはプロパティに割り当てる必要がある場合、それを関数に渡す必要がある場合、または関数から null を返す必要がある場合は、ほとんどの場合、null が最良の選択です。要するに、JavaScript は unfineed を使用し、プログラマは null を使用する必要があります。
null のもう 1 つの使用例は、参照が必要なくなったときに、変数を無効 (object= null) として明示的に指定することです。 Null 値を割り当てることにより、参照は実質的にクリアされ、オブジェクトが他のコードによって参照されていないことを前提として、メモリが確実に再利用されるようにガベージ コレクションが指定されます。
4. さらに深く掘り下げる
null と unknown をブラック ホールのようにしているのは、その動作だけではなく、JavaScript 環境内での内部的な処理方法にもあります。多くの場合、それらは他のネイティブ オブジェクトや組み込みオブジェクトと同じ関連特性を持っていないように見えます。
ES5 では、Object.prototype.toString メソッドが事実上の型チェック標準となり、null および未定義との一貫性が証明されています。
然而,Object.prototype.toString方法其實並不是檢索null的內部[[Class]]屬性或undefined的公開建構子。根據文檔,以下步驟發生在被調用過程中:
如果值是undefined,則回傳「[object Undefined]」。
該方法執行一個簡單的字串回傳值,如果它偵測到null或undefined和其他物件統一的功能。在整個規範中這是很常見的,因為當遇到null和undefined值時大多數方法包含一個簡單的捕捉並傳回。事實上,沒有跡象表明他們包含與任何原生物件相關聯的內部屬性。就好像他們不是對象。我很想知道如果一個JavaScript的原生環境內部實際存在的明確方案會怎麼樣?也許有人更熟悉一個可以參與的實現。
結論
無論這些原生物件多麼不尋常,理解null和undefined之間的差異,和他們在JavaScript的語言基礎中截然不同的角色。它可能不能使你的應用程式有所突破,但是一般來說,它僅被證明在開發和調試中長期有益。
以上就是針對javascript中原始資料類型Null和Undefined進行的介紹,希望對大家的學習有所幫助。