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

なぜこれが起こっているのでしょうか?回避策はありますか?変数が存在するかどうかをチェックする関数を作成しようとしています。

4

3 に答える 3

6

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

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

このコードもエラーになります。 Uncaught ReferenceError: obj is not defined
したがって、関数内にどのコードを記述しても呼び出されないため、問題ありません。エラーは関数呼び出しの前に発生します。

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

于 2013-06-05T14:45:31.577 に答える
4

typeofは関数ではなく演算子であるため、関数が持てない力を持っています。あなたがやろうとしていることをする方法はありません。

于 2013-06-05T14:38:30.567 に答える
3

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

于 2013-06-05T14:37:47.370 に答える