ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptにおけるnullとunknownの使い方の違いを詳しく解説

JavaScriptにおけるnullとunknownの使い方の違いを詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-18 14:07:141589ブラウズ

未定義と null を判断する:

<span style="font-size: small;">var tmp = undefined; 
if (tmp== undefined) 
{ 
alert("null or undefined"); 
} </span>
<span style="font-size: small;">var tmp = undefined; 
if (tmp== null) 
{ 
alert("null or undefined"); 
}</span>

説明: null==未定義

しかし:
null !== 未定義
それでは、この 2 つの違いは何でしょうか?
null
これはオブジェクトですが、空です。これはオブジェクトであるため、 typeof null は 'object' を返します。
null は JavaScript の予約キーワードです。
null の値は、数値演算に参加すると自動的に 0 に変換されます。そのため、次の式は計算後に正しい値を取得します:
式: 123 + null 結果値: 123
式: 123 * null 結果値: 0
未定義
未定義はグローバル オブジェクト (ウィンドウ) の特別なプロパティであり、その値は未定義です。ただし、 typeof unknown は 'unknown' を返します。
未定義は特別な意味を持ちますが、確かにプロパティであり、グローバル オブジェクト (ウィンドウ) のプロパティです。

alert(&#39;undefined&#39; in window);//输出:true 
var anObj = {}; 
alert(&#39;undefined&#39; in anObj); //输出:false

このことから、unknown は window オブジェクトの属性ですが、anObj オブジェクトの属性ではないことがわかります。
注: unknown は特別な意味を持つ属性ですが、JavaScript では予約されたキーワードではありません。
未定義が数値計算に参加する場合、結果は NaN でなければなりません。
ところで、NaN はグローバル オブジェクト (ウィンドウ) のもう 1 つの特別なプロパティであり、Infinity も同様です。これらの特別な属性はいずれも JavaScript の予約キーワードではありません。

未定義のパフォーマンスの改善
プログラム内で未定義の値を使用する場合、実際にはウィンドウオブジェクトの未定義プロパティを使用します。
同様に、変数を定義しても初期値を割り当てない場合、たとえば次のようになります。
var aValue;
このとき、JavaScript はいわゆるプリコンパイル中に、その初期値を window.unknown プロパティへの参照に設定します。
つまり、変数または値を unknown と比較するとき、それは実際には window オブジェクトの unknown プロパティと比較されます。この比較プロセス中に、JavaScript はウィンドウ オブジェクトの「unknown」という名前のプロパティを検索し、2 つのオペランドの参照ポインタが同じかどうかを比較します。
window オブジェクトは多くの属性値を持っているため、undefined との比較のたびに window オブジェクトの unknown 属性を検索するのに時間がかかります。これは、未定義との頻繁な比較を必要とする関数のパフォーマンス上の問題となる可能性があります。

このうち、未定義のローカル変数を定義した場合、その初期値はwindow.unknownプロパティ値への参照となります。新しく定義されたローカル未定義変数が関数のスコープ内に存在します。後続の比較操作では、JavaScript コードの記述方法に変更はありませんが、比較速度は非常に高速です。スコープ内の変数の数はウィンドウ オブジェクトのプロパティよりもはるかに少ないため、変数の検索速度が大幅に向上します。
これが、多くのフロントエンド JS フレームワークがローカルの未定義変数を独自に定義することが多い理由です。

以上がJavaScriptにおけるnullとunknownの使い方の違いを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。