2016-09-23 7 views
1

私はこの問題を見て:変数を未定義と比較すると、「変数未定義」エラーが表示されるのはなぜですか?

How to determine if variable is 'undefined' or 'null'?

しかし、それは助けにはなりませんでした。

私は次のコードを持っている:

if (_modeID != 8 && _modeID != 9) 
     // do something 

_modeIDはすべて一緒に別のファイルに定義され、値が割り当てられます。

何らかの理由でvar _modeID = someIntVal;が実行されないバグが発生しました。したがって、上記のifの文が実行されると、_modeIDはまったくありません。

私はそれがif (_modeID === null || _modeID === undefined || (_modeID != 8 && _modeID != 9)なるように拡張が、これはまだ、次のエラーがスローされます。

ReferenceError - Java Script Error : '_modeID' is undefined

Iは、第1または第2の条件は、この場合にはtrueに評価さどうやらないだろうどちらかということを望んでいました。誰かが私が間違っていることについていくつかの光を当てることができますか?

は、2つのスニペットが「完全」なファイルであると仮定して単純にif (_modeID === undefined) ...と同じではありませんか?

+1

は、人ではなく変数自体の変数の型をチェックしてください[ '使用typeof'](https://stackoverflow.com/questions/5113374/javascript-check-もしあなたが本当に '_modeID'が定義されているかどうかを知りたいのであれば、あなたが求めるべき質問は**なぜ**それを定義する他の文が実行されていないか、あなたは実際にその問題を診断するのに十分なコードを投稿していません。 – meagar

+0

_modeIDが定義されているこの個別のファイルについて詳しく説明できますか?定義を表示できますか?私はそれが他のどこかの機能範囲にあるかもしれないと思う。 – sma

+0

'_modeID'は.cshtml Razor Viewファイルに' var _modeID = @ Model.IntMode'のように定義されています。我々は、(この値を作成/設定する)レポート、またはレポートを見つけるための検索ページを一覧表示するページを持っています。検索ページを使用している場合は、レポートを表示するページではなくレポートに直接表示されるため、その変数は作成されません。正直なところ、それは本当に問題ではない。変数は文字通り私の質問のその単一のチェックでのみ使用されています。この値は他の場所では使用されません。 – sab669

答えて

5

が、私は一般的に、すなわち

if(typeof _modeID === 'undefined') { 
    ... 
} 
+2

そして、*理由*は、 '_modeID ===未定義 'が' _modeID'が解決できないシンボル(包含スコープ内で宣言されていない)であれば 'ReferenceError'を投げます。しかし 'if(typeof _modeID ===" undefined ")'は '_modeID'が解決できなくても投げません。代わりに、 'typeof _modeID'の結果は' 'undefined ''です。 –

+1

説明ありがとうございます@ T.J.Crowder – Quantastical

+0

これは機能します!ありがとう – sab669