来週、職場で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は関数型で関数オブジェクトのインスタンスということになるんですと。