10

変数が未定義かどうかをチェックする再利用可能な関数を作成しようとしています。奇妙なことに、変数を関数に渡してコードを実行すると機能しませんが、関数の外で同じロジックを使用すると機能します。この関数 isDefined を機能させる方法はありますか?

//THIS WORKS AND RETURN FALSE
alert(typeof sdfsdfsdfsdf !== 'undefined');

//THIS GIVES AN ERROR, WHY?
//Uncaught ReferenceError: sdfsd is not defined 
function isDefined(value) {
        alert(typeof value !== 'undefined' && value !== null)
}

isDefined(sdfsd);

ライブサンプルはこちら (コンソールでエラーを確認してください): http://jsfiddle.net/JzJHc/

4

1 に答える 1

10

typeofテスト以外で宣言されていない変数を使用することはできません

宣言されていない変数を関数に渡そうとすると、宣言されていない変数を使用していると見なされます。エラーが内部ではなく、呼び出し元にあることに気付くでしょう。isDefined

チェックを実行する必要があります

if (typeof sdsdsd !== 'undefined')

関数に渡す前に。つまり、宣言されていない変数を受け入れる関数を作成することはできません。isDefinedあなたの関数は未定義のプロパティに対してのみ機能します(これは渡しても問題ありません)

しかし、私は興味があります.存在しない変数を渡す現実世界のケースは何ですか? すべての変数を宣言する必要があり、それらは既に存在している必要があります。var sdsdsdsの値で存在すると宣言した場合、関数は正常に機能undefinedします。isDefined

于 2012-08-09T00:04:33.883 に答える