2007/10/13(土)21:37
Javascript 変数が定義されているか
Javascriptを勉強しています。
変数が定義されているかは、
if(typeof a[1] == 'undefined')
のように、型を調べると良いようです。
また、プロパティであれば、
if("a" in this)
のようにすると良いようです。
if(this.hasOwnProperty("a"))
という方法もあるようですが、IEでは、注意が必要のようで、thisの部分が、クラスでなければ、エラーになるようです。
プロパティに関しては、
var Animal = function(name, sex) {
this.name = name;
this.sex = sex;
}
のように、クラス定義時に宣言する方法と、後で、prototypeを使って、追加する方法があるようです。
また、面白いのは、インスタンスに対して追加することができ、
var Animal = function(name, sex) {
this.name = name;
this.sex = sex;
}
var anim = new Animal("トクジロウ", "オス");
anim.toString = function() {
window.alert(this.name + " " + this.sex);
};
anim.toString(); // 「トクジロウ オス」
とすることができるようです。
ただし、別のインスタンスには、追加されたメンバはないことに注意が必要です。
このように、同じオブジェクトであっても、インスタンスのメンバ(プロパティ)が異なることがあるため、先に挙げた変数が定義されているかを調べることが重要になってきます。
evalによって、動的にオブジェクトの宣言が可能であることからも、この点が重要になります。
Javaを参考にしながら、C#とJavascriptは、別の方向に進んでいるように思いました。もっとも、用途が異なるため、当然といえば、そうですが。
思想的に、前者は、フレームワークで実現してきたことを、言語仕様に取り込んでいくのに対して、後者は、同じような機能は統一して、言語仕様自体は簡素に徹しようとしているように思います。
参考
第4回 JavaScriptでオブジェクト指向プログラミング