本人还是个新手,若有不对的,请指教~

  学习typeof、constructor和toString的一点总结,感觉书上总结的挺好

 1、使用typeof运算符返回一个用于识别其运算数类型的字符串。对于任何变量来说,使用typeof运算符总是以字符串的形式返回一下6种类型之一:

      'number' 'string' 'boolean' 'object' 'function' 'undefined'

     不幸的是,在使用typeof检测null值时,返回的是‘object’,而不是‘null’。更好地检测‘null’的方式其实很简单。下面定义一个检测值类型的一般方法:

    function type(o){return (o===null) ? 'null' : (typeof o)}

    这样就可以避开因为null值影响基本数据的类型检测。注意:typeof不能够检测复杂的数据类型 

2、对于对象或数组,可以使用constructor属性,该属性值引用的是原来构造该对象的函数。如果结合typeof运算符和constructor属性,基本能够完成数据类型的检测。

    使用constructor属性可以判断绝大部分数据类型。但是,对于undefined和null特殊值,就不能使用constructor属性,因为使用javascript解释器会抛出异常。此时可以先把值转换为布尔值,如果为true,则说明不是undefined和null值,然后在调用constructor属性,列如:

    var value = null;

    alert(typeof value);

   alert(value & value.constructor);

 3、使用toString()方法检测对象类型是最安全、最准确的。调用toString()方法把对象转换为字符串,然后通过检测字符串中是否包含数组所特有的标志字符可以确定对象的类型。toString方法返回的字符串形式如下:

   [object class]

//安全检测javascript基本数据类型和内置对象
//参数:o表示检测的值
/*返回值:返回字符串'undefined'、'number'、‘boolean’、‘string’、‘function’、‘regexp

’、‘array’、‘date’、‘error’、‘object’或‘null’*/
 function typeof(o){
  var _toString = Object.prototype.toString;
  //获取对象的toString()方法引用
 //列举基本数据类型和内置对象类型,可以进一步补充该数组的检测数据类型范围
var _type={
   'undefined':'undefined',
   'number':'number',
    'boolean':'boolean',
    'string':'string',
     '[object Function]':'funciton',
      '[object RegExp]':'regexp',
      '[object Array]':'array',
    '[object Date]':'date',
    '[object Error]':'error'
}
  return _type[typeof o] || _type[_toString.call[o] || (o?'object':'null');]
}