素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

instanceofとか===とかtypeofとかをまとめる

JavaScriptは、typeof nullが"object"だったり、typeof new String("foo")が"object"だったり、"foo" instanceof Stringがfalseだったりする。
なので、それらをまとめて下のような関数にして、ビットマスクを使って目的の型かどうかを確認できるようにする。

var Type = {
  OBJECT: 0x01,
  ARRAY: 0x02,
  STRING: 0x04,
  FUNCTION: 0x08,
  NUMBER: 0x10,
  BOOLEAN: 0x20,
  UNDEFINED: 0x40,
  NULL: 0x80,
  getType: function getType(object) {
    var ret = 0x00;
    if (object instanceof Object)
      ret |= 0x01;
    if (object instanceof Array)
      ret |= 0x02;
    if (object instanceof String || typeof object == "string")
      ret |= 0x04;
    if (object instanceof Function)
      ret |= 0x08;
    if (object instanceof Number || typeof object == "number")
      ret |= 0x10;
    if (object instanceof Boolean || typeof object == "boolean")
      ret |= 0x20;
    if (object === undefined)
      ret |= 0x40;
    if (object === null)
      ret |= 0x80;
    return ret;
  }
};

var type = Type.getType(new String("foo"));
console.log("type & Type.OBJECT = %d", type & Type.OBJECT); // 1
console.log("type & Type.OBJECT = %d", type & Type.STRING); // 4
console.log("type & Type.OBJECT = %d", type & Type.BOOLEAN); // 0