次のように変数を定義すると、次のようになります。
var defined;
値はありませんが、参照が存在するため、ReferenceError は発生しません。何も参照していないだけです。したがって、以下は有効です。
if (defined != null) { ... }
このような関数の場合
function doSomethingWithDefined(defined) {
if (defined != null) { ... }
}
次のように翻訳できます。
function doSomethingWithDefined() {
var defined = arguments[0];
if (defined != null) { ... }
}
変数は暗黙的に宣言されているため (ただし、必ずしも定義されているわけではありません)、これを実行しても例外は発生しないため、typeof
.
doSomethingWithDefined("value"); // passes defined != null
doSomethingWithDefined(); // defined == null, but no exception is thrown
typeof 演算子は通常、変数が宣言されているかどうかわからない場合に使用されます。ただし、現実世界のすべてのシナリオで機能する代替手段があります。
if (window.myvariable != null) {
// do something
}
考慮すべき非パラメーター変数はグローバル変数のみであるため、プロパティ アクセスを使用して例外を回避することもできます。
とはいえ、型回避ではなく、型チェックを強くお勧めします。ポジティブになれ!
文字列ですか?
if (typeof declared === "string"){ ... }
配列ですか?
if (typeof declared === "object" && declared.length != null){ ... }
非配列オブジェクトですか?
if (typeof declared === "object" && declared.length == null){ ... }
関数ですか?
if (typeof declared === "function"){ ... }