2

1.typeof操作符返回一个字符串,指示未经计算的操作数的类型。

语法:type opreand
参数: opreand是一个表达式,表示对象或者原始值,其类型将被返回。
描述:
    类型                         结果
    Undefined                    "undefined"
    Null                         "object"
    Boolean                      "boolean"
    Number                       "number"
    String                       "string"
    Symbol(ECMAScript 6 新增)    "symbol"
    函数对象                      "function"
    任何其他对象                  "object"

2.typeof 对于一些特殊数据时的表现

typeof (new Number(1));          //结果并不是想象中的"number"而是"object"
typeof (new String("hello"));     //同理结果仍然是"object"
tyoeof (new Boolean(true));       //返回"object"

typeof null;                      //返回也为"object"

3.instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

语法:object instanceof constructor
参数:object 要检测的对象   constructor   某个构造函数
通过这个运算符我们就可以用来检测object真正的数据类型
    (new Number(1));       instanceof Number    //true
    (new Array("2,3"));    instanceof Array     //true
    (new String("hello")); instanceof String    //true
但是如果是null的话,好像就没办法解决了呢。我们可以提前使用对象的toString方法判断是否为null

4.更好的做法是借用Object.prototype.toString

Object.prototype.toString.call(1);              // "[object Number]"
Object.prototype.toString.call(new Number(1));  // "[object Number]"
Object.prototype.toString.call("hello");        // "[object String]"

Object.prototype.toString.call(function(){});   // "[object function]"
Object.prototype.toString.call(null);           // "[object Null]"

所以我们可以封装一个利用Object.prototype.toString来判断数据类型的函数。

  function classOf(obj) {
      return Object.prototype.toString.call(obj).slice(8, -1);
  };
  classOf(null); //'Null'
   

zer0_li
1.4k 声望307 粉丝

经不住似水流年,逃不过此间少年