変数が定義されているかどうかを確認したいと思いました。たとえば、次は未定義のエラーをスローします
alert( x );
このエラーをキャッチするにはどうすればよいですか?
変数が定義されているかどうかを確認したいと思いました。たとえば、次は未定義のエラーをスローします
alert( x );
このエラーをキャッチするにはどうすればよいですか?
回答:
JavaScriptではnull
、オブジェクトです。存在しないものには別の価値がありundefined
ます。DOMはnull
、ドキュメント内の一部の構造を見つけることができないほとんどすべての場合に戻りますが、JavaScript自体undefined
では値が使用されます。
第二に、いいえ、直接同等のものはありません。特にを確認したい場合はnull
、次のようにします。
if (yourvar === null) // Does not execute if yourvar is `undefined`
変数が存在するかどうかを確認する場合は、try
/ catch
でのみ実行できます。これtypeof
は、が宣言されていない変数との値で宣言された変数undefined
を同等のものとして扱うためです。
しかし、変数が宣言されていて、宣言されていないかどうかを確認するにはundefined
:
if (yourvar !== undefined) // Any scope
以前は、typeof
未定義を安全にチェックするために演算子を使用する必要がありました。これはundefined
、変数のように再割り当てすることが可能だったためです。古い方法は次のようになりました:
if (typeof yourvar !== 'undefined') // Any scope
問題undefined
の再割り当て可能はあなたが安全に使用することができます2009年に発売されたのECMAScript 5に固定された===
と!==
のために、テストにundefined
使用しないでtypeof
とundefined
、読み取り専用されているいくつかの時間のために。
メンバーが独立して存在するかどうかを知りたいが、その値が何であるかを気にしない場合:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
変数が真実かどうかを知りたい場合:
if (yourvar)
変数が真であるかどうかを本当にテストする唯一の方法undefined
は、以下を実行することです。undefinedはJavaScriptのオブジェクトです。
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
このスレッドの他のソリューションのいくつかは、変数が定義されていても(たとえば、NULLまたは0の値で)変数が未定義であると思わせる場合があります。
ReferenceError
。
undefined
、JavaScriptのオブジェクトは誤った情報であると言っています。とにかく、このステートメントはあなたの答えに関連していますか?これはundefined
type という値でundefined
、という名前のグローバル識別子に割り当てられundefined
ます。
undefined
ES5以降、読み取り専用になっています。次のif (x === undefined) {...}
ように、未定義を使用して、または省略形を使用して安全にテストできますif (x === void 0)
。
技術的には、適切な解決策は(私は信じています):
typeof x === "undefined"
あなたは時々怠惰になって使うことができます
x == null
ただし、これにより、未定義の変数xとnullを含む変数xの両方がtrueを返すことができます。
var x;
、その後、typeof x;
あなたが得るでしょう"undefined"
、あなたがやっているかのようにtypeof lakjdflkdsjflsj;
さらに簡単で簡単なバージョンは次のとおりです。
if (!x) {
//Undefined
}
または
if (typeof x !== "undefined") {
//Do something since x is defined.
}
私はよくやった:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
三項条件演算子も使用できます。
var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
var a = false;
?a===undefined
代わりにそれを確認する必要があります
var x;
上記を実行するとエラーが発生します
!a
trueでundefined
あるかどうかをテストするだけでなく、0
and null
およびでもtrueをテストしますfalse
。これは非常に正しくないため、削除する必要があります。
私はしばしば最も簡単な方法を使用します:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
編集:
変数を初期化しないと、「Uncaught ReferenceError:variable is not defined ...」という例外がスローされます。
Uncaught ReferenceError: variable is not defined
variable
によって定義されvar variable;
ます。そして、このスニペットはvariable
ローカルスコープでオーバーライドします。クロージャまたはグローバル変数へのアクセスを期待しているロジックを壊す可能性があります。すなわち:var variable = 1; function test() { var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined: ' + variable); } } test(); // Variable is undefined
別の潜在的な「解決策」は、window
オブジェクトを使用することです。ブラウザでの参照エラーの問題を回避します。
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
。これはそれをしません。
エラーはx
存在しないことを示しています!値が割り当てられているのとは異なり、宣言されていません。
var x; // declaration
x = 2; // assignment
を宣言した場合x
、エラーは発生しません。存在する/宣言されているが値が割り当てられていないundefined
ため、アラートx
が表示されます。
変数が宣言されているかどうかを確認するには、を使用できますtypeof
。変数が存在するかどうかを確認する他の方法では、最初に取得したのと同じエラーが発生します。
if(typeof x !== "undefined") {
alert(x);
}
これは、に格納されている値のタイプをチェックしていますx
。それだけで返されますundefined
ときx
に宣言されていないか、またはそれがあればしていると宣言されて、まだ割り当てられていませんでした。
typeof
演算子は不要になりました。
void
オペレータが戻るundefined
ことに渡される引数/発現のために。その結果をテストできます(実際には、いくつかの縮小機能はコードをからundefined
に変更してvoid 0
、2、3文字を保存します)。
例えば:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
考え方undefined
を再割り当てできます。
undefined
としても、神はどのような理由を知っているだけなので、使用void 0
は常にundefined
関係なく戻ります。
受け入れられた答えは正しいです。オプションをもう1つ追加したかっただけです。try ... catch
ブロックを使用してこの状況を処理することもできます。気まぐれな例:
var a;
try {
a = b + 1; // throws ReferenceError if b is not defined
}
catch (e) {
a = 1; // apply some default behavior in case of error
}
finally {
a = a || 0; // normalize the result in any case
}
catch
ブロックレベルのスコープを作成するため、少し面倒なブロックに注意してください。そしてもちろん、この例は質問に答えるために非常に単純化されており、エラー処理のベストプラクティスはカバーされていません;)
小さな関数を使用して、変数が宣言されていることを確認します。これにより、JavaScriptファイルの乱雑さを大幅に削減できます。値のチェックを追加して、変数が存在するだけでなく、値が割り当てられていることを確認します。2番目の条件は、変数がインスタンス化されているかどうかをチェックします。変数が定義されているがインスタンス化されていない場合(以下の例を参照)、コードでその値を参照しようとすると、エラーがスローされます。
インスタンス化されていません- var my_variable;
インスタンス化されています-var my_variable = "";
function varExists(el) {
if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) {
return true;
} else {
return false;
}
}
次に、条件ステートメントを使用して、変数が次のように定義され、インスタンス化されていることをテストできます...
if ( varExists(variable_name) ) { // checks that it DOES exist }
または、それが定義およびインスタンス化されていないことをテストするには...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
return typeof el !== "undefined" && typeof el.val() !== "undefined"