JavaScript での Null および未定義の解析_javascript のヒント

WBOY
リリース: 2016-05-16 17:54:18
オリジナル
1013 人が閲覧しました

JavaScript 開発で、「null と unknown の違いは何ですか?」と尋ねられました。

特に未定義については、未定義の実装原則が関係するため、現時点で答えるのは困難です。そこで、よく考えた結果、この記事を書き、皆さんにご協力をお願いしました。

ご存知のとおり: null == 未定義

ただし: null !== 未定義

では、この 2 つの違いは何でしょうか?

私の雄弁な話を聞いてください...

ヌル

これはオブジェクトですが、空です。これはオブジェクトであるため、 typeof null は 'object' を返します。

null は JavaScript の予約キーワードです。

null が数値演算に関与する場合、その値は自動的に 0 に変換されます。したがって、次の式は計算後に正しい値を取得します。

式: 123 null 結果値: 123

式: 123 * null 結果値: 0

未定義

未定義はグローバル オブジェクト (ウィンドウ) の特別なプロパティであり、その値は未定義です。ただし、 typeof unknown は 'unknown' を返します。

未定義には特別な意味がありますが、実際にはプロパティであり、グローバル オブジェクト (ウィンドウ) のプロパティです。以下のコードを見てください:

alert('未定義' ウィンドウ); //出力: true

alert(未定義' ウィンドウ); //出力: true
var anObj = {}; anObj); //出力: false

このことから、unknown は window オブジェクトのプロパティですが、anObj オブジェクトのプロパティではないことがわかります。

注: 未定義は特別な意味を持つ属性ですが、JavaScript では予約されたキーワードではありません。

未定義が数値計算に参加する場合、結果は NaN でなければなりません。

ところで、NaN はグローバル オブジェクト (ウィンドウ) のもう 1 つの特別なプロパティであり、Infinity も同様です。これらの特別な属性はいずれも JavaScript の予約キーワードではありません。

未定義のパフォーマンスを改善します

プログラム内で未定義の値を使用する場合、実際にはウィンドウ オブジェクトの未定義のプロパティを使用します。

同様に、変数を定義しても初期値を割り当てない場合、たとえば次のようになります。

var aValue;

現時点では、JavaScript はいわゆるプリコンパイル中に、初期値を window.unknown プロパティへの参照に設定します。

したがって、変数または値を未定義と比較する場合、実際にはウィンドウ オブジェクトの未定義プロパティと比較されます。この比較プロセス中に、JavaScript はウィンドウ オブジェクトの「unknown」という名前のプロパティを検索し、2 つのオペランドの参照ポインタが同じかどうかを比較します。

windowオブジェクトは多くの属性値を持っているため、undefinedとの比較のたびにwindowオブジェクトの未定義属性を探すのに時間がかかります。これは、未定義との頻繁な比較を必要とする関数のパフォーマンス上の問題となる可能性があります。したがって、この場合、ローカルの未定義変数を自分で定義して、未定義の比較を高速化できます。例:

function anyFunc()

{

var unknown; //カスタマイズされたローカルの未定義変数


if(x == unknown) //スコープでの参照比較

while( y != unknown) //スコープでの参照比較

};

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

これが、多くのフロントエンド JS フレームワークがローカルの未定義変数を独自に定義することが多い理由です。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート