変数が定義されているかどうかを確認したいのですが。たとえば、次のように定義されていないエラーが発生します。
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 (typeof yourvar !== 'undefined') // Any scope
変数が存在することがわかっていて、そこに値が格納されているかどうかを確認したい場合は、
if (yourvar !== undefined)
メンバーが独立して存在するかどうかを知りたいが、その値が何であるかは気にしないでください。
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
変数が truthy であるかどうかを知りたい場合は、
if (yourvar)
変数がundefined
であるかどうかを真にテストする唯一の方法は、次のようにすることです。未定義はJavaScriptのオブジェクトです。
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
このスレッドの他の解決策の中には、変数が定義されていても(たとえば、NULLまたは0の値で)、変数が未定義であると信じるように誘導するものがあります。
技術的には、適切な解決策は次のとおりです(私は信じています)。
typeof x === "undefined"
あなたは時々怠惰になって使用することができます
x == null
しかし、それは未定義変数xとnullを含む変数xの両方がtrueを返すことを可能にします。
私はよくやった:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
さらに簡単でより簡略化されたバージョンは次のようになります。
if (!x) {
//Undefined
}
OR
if (typeof x !== "undefined") {
//Do something since x is defined.
}
三項条件演算子を使用することもできます。
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);
他の可能性のある「解決策」はwindow
オブジェクトを使うことです。ブラウザでの参照エラーの問題を回避します。
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
私はしばしば最も簡単な方法を使います。
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
編集:
変数を初期化しないと、 "Uncaught ReferenceError:variable is defined ..."という例外がスローされます。
void
演算子は、渡された引数/式に対してundefined
を返します。その結果をテストすることができます(実際には2、3文字を節約するために、一部のミニファイヤーはコードをundefined
からvoid 0
に変更します)。
例えば:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
以下のようにundefined
をチェックできます
var x;
if (x === undefined) {
alert("x is undefined");
} else {
alert("x is defined");
}
エラーは、x
が存在しないことを示しています! 宣言済みではなく、割り当て済み値とは異なります。
var x; // declaration
x = 2; // assignment
x
を宣言した場合、エラーは発生しません。 undefined
が存在する/宣言されているが値が割り当てられていないため、x
というアラートが表示されます。
変数が宣言されているかどうかを確認するには、typeof
を使用できます。変数が存在するかどうかを確認する他の方法では、最初に取得したのと同じエラーが発生します。
if(typeof x !== "undefined") {
alert(x);
}
これは、x
に格納されている値のタイプをチェックしています。 undefined
が宣言されていない場合にのみx
を返しますORhasが宣言されている場合そしてまだ割り当てられていませんでした。
変数が宣言されたことを確認するために小さな関数を使用しています。これにより、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 }
以下のようにしてください。
function isNotDefined(value) {
return typeof value === "undefined";
}
そしてそれを次のように呼ぶ:
isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false
受け入れられた答えは正しいです。もう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
ブロックは、ブロックレベルのスコープを作成するので、少し面倒です。そして、もちろん、例は尋ねられた質問に答えるために非常に単純化されています、それはエラー処理のベストプラクティスをカバーしません;)。