2013-06-05 19 views
11

は以下のJavascriptを考えてみ存在するかどうかを確認:?関数に未定義のパラメータを渡す - 変数が

function getType(obj){ 
    return(typeof(obj)) 
} 
alert(typeof(obj)) //alerts "undefined" correctly 
alert(getType(obj)) //throws an error: ReferenceError: obj is not defined 

は、なぜこれが起こっされる可能性がありますか回避策はありますか?変数が存在するかどうかを調べる関数を記述しようとしています。

+2

グローバルコンテキストに* something *が存在するかどうかをチェックするには、 'if(window [" obj "])'を使うことができます。 –

答えて

6

問題はtypeofとは関係ありません。問題は、未定義の変数を関数に渡すことができないことです。

function doNothing(obj){ 
} 
doNothing(obj); 

このコードはエラーであまりにも結果:Uncaught ReferenceError: obj is not defined
それは呼ばれませんように、あなたがあなたの関数の内部で書かれたものはコードは重要ではありません。エラーは、関数呼び出しの前に発生します。

typeofは関数ではなく、演算子です。 これは、関数と同じように動作しない理由です。

3

未定義のオブジェクトを渡そうとするとすぐに関数が失敗します。 typeof()機能をカプセル化することはできません。さて、あなたはできますが、未定義のオブジェクトを渡すと常にエラーがスローされます。

4

typeofは、関数ではなく演算子であるため、関数が持つことができない累乗を持ちます。あなたがしようとしていることをする方法はありません。

+1

また、オペレータとして、オペランドの周囲に中カッコを必要としません。 – Alnitak

+0

私は十分に公平です。情報をありがとう。 – cronoklee