「グローバル変数」と「グローバル オブジェクトのプロパティ」は同じものを指しますが、本文では説明しません。「宣言」とは、「var」ステートメントによる変数の宣言を指します。および/または関数の定義とそのシグネチャ。「変数」は「var」ステートメントで宣言された、または関数本体でアクセスしようとした名前付きパラメータを指します。「未定義」は値 (グローバル変数またはローカル変数) を指します。 「未定義」という名前の場合、「未定義」は type(...) == "未定義" の状況を指します。「出力」は受信パラメータを表示する関数であり、「アラート」と同じ種類と見なすことができます。
JavaScript プログラムを作成するときは、たとえば、特定の値が割り当てられているかどうか、または割り当てられている特定の値を削除する必要があるかを知る必要があります。これは可能です:
output (myVar === unknown );
myVar = unknown;
しかし、これは、存在しない変数を「読み取る」(または比較する) ことを試みると、次のようになります。例外がスローされます。
たとえば、設計が不十分なために上記のコードを実行するときに変数 myVar が定義されていない場合、上記のコードは問題を起こします。
さらに、以前のブラウザ バージョンでは、この事前定義された値は未定義ではありません。したがって、互換性と耐障害性を向上させるために、これを行うことができます:
output(typeof(myVar) == "unknown");
myVar = void(0);
typeof 演算子は JavaScript の言語機能ですが、コードは次のようになります。
Output( oneFunction(myVar) == "未定義");
myVar = void(0);
しかし、この 2 つには重要な違いがあります。myVar が存在しない場合、前者は正しく実行され、文字列「unknown」が返されます。後者は内部構造に関係なく例外をスローします。
void はもう 1 つの言語機能です。この演算子の意味は、スクリプトの他の部分から受け取ったパラメーターを隠すことです。void の「操作」の結果を取得しようとするステートメントがある場合は、「unknown」しか取得できません。 " 意味"。
void のこの特性により、void には最も一般的な機能が 2 つあります。1 つは、上記のコードのように「未定義」の値を他の変数/プロパティに割り当てることです。もう 1 つは次のようなものです。
お気に入りリストに追加 favList は JavaScript 配列、curItem はすでに定義されているオブジェクトです。この例では、配列のメソッドはプッシュ操作後に配列の長さを返しますが、この長さは役に立ちませんが、そのままにしておくと、ブラウザはスクリプトの結果ページのみを表示する、ほぼ空白の状態にジャンプする可能性があります。 Push の戻り値 (「3」など)。
したがって、ブラウザを「騙す」には void 演算子を使用する必要があります。ここには何もありません。
ここで「unknown」の使用に戻ると、「unknown」と比較するために使用した「高耐障害性」typeof 演算子は使用するのが少し面倒であることがわかります。合計で「typeof()」をさらに記述する必要があります。 「"」は10文字です。
私たちは一日中トラブルに対処するプログラマーですが、トラブルを減らす方法を考えるべきではないということではありません~ さまざまな開発ツールは実際にプログラミングの作業を楽にするために作られているのではないでしょうか?
そのため、変数が宣言されている必要があることが明確にわかっている場合は、その変数を既知の「未定義」と直接比較できます。たとえば、次のようになります。
output(myVar === void(0));
Compare typeof を使用した場合との比較後者の方法には、数文字の入力が節約できるだけでなく、検出が困難なスペル エラー (たとえば、「未定義」などの代わりに「未定義」と書くなど) を回避できるという利点もあります。
この時点で、「未定義」/「未定義」に関する最も一般的なテクニックが導入されました。
次の記事では、あまり一般的ではないテクニックをいくつか紹介します。