« iGoogle ガジェットコンテストの結果が特別賞に | メイン | JavaScript勉強会 »

instanceof の戻り値

来週、職場でJavaScriptの勉強会を開くことになって、資料を作っていたんですが、その中でへぇと思ったことがあったのでメモ。

instanceof で何のインスタンスかが分かるんですが、

var a = 1;
alert(typeof a); // number
alert(a instanceof Number); // false
a = new Number(1);
alert(typeof a); // object
alert(a instanceof Number); // true
a = a + '';
alert(typeof a); // string
alert(a instanceof String); // false
a = new String('1');
alert(typeof a); // object
alert(a instanceof String); // true
a = true;
alert(typeof a); // boolean
alert(a instanceof Boolean); // false
a = new Boolean('true');
alert(typeof a); // object
alert(a instanceof Boolean); // true

てなかんじで、new したやつはちゃんとオブジェクトのインスタンスとして認識されるんですね。

でもって、関数は、

function a(){}
alert(typeof a); // function
alert(a instanceof Function); // true
var b = new Function();
alert(typeof b); // function
alert(b instanceof Function); // true
var c = function(){}
alert(typeof c); // function
alert(c instanceof Function); // true

どう宣言しても、ちゃんとtypeofは関数型で関数オブジェクトのインスタンスということになるんですと。