おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

JavaScriptでオペランドやオブジェクトを判別する方法

方法としては下記の三つがあるようです。

それぞれ気になったところをメモっておきます。

typeof演算子

戻り値を調べてみた。

オペランド 戻り値
数値 number
文字列 string
論理値 boolean
オブジェクト object
配列 object
null object

配列とnullが意外。

instanceof演算子

プロトタイプチェーンも辿ってくれるらしい。

function Hoge(){};
function Foo(){};
Foo.prototype = new Hoge();
var foo = new Foo();
alert(foo instanceof Hoge); // true

constructorプロパティ

constructorプロパティは、コンストラクタ関数を参照します。

function Hoge() {};
var hoge = new Hoge;
alert(hoge.constructor == Hoge) // true

継承(prototypeオブジェクトに親のインスタンスを入れる)すると、親のコンストラクタ関数になります。

function Hoge() {};
function Foo(){};
Foo.prototype = new Hoge();
var foo = new Foo;
alert(foo.constructor == Foo) // false
alert(foo.constructor == Hoge) // true

感想

  • オペランドを調べるときはtypeof
  • オブジェクトを調べるときはinstanceof
  • constructorプロパティはいまいち使いどころがわからない