首页
Javascript
Html
Css
Node.js
Electron
移动开发
工具类
服务端
浏览器相关
前端收藏
其他
关于

利用Object.prototype.toString判断javascript数据类型(数组,函数,类对象{},布尔类等)

2013年08月12日 发布 阅读(278) 作者:懒炖

一般情况下,判断javasceript数据类型,使用typeof 或 instanceof 就够了,但偶觉得用起来还是别别扭扭的。这里介绍一个完美的方法,我们可以轻松的判断数组,对象(这里对象暂且指{}),函数(function),布尔(Boolean),null,undefined,number,时间对象(date),正则表达式(RegExp)。

先把代码贴上:

  1. function typeOf(o) {
  2. var _toString = Object.prototype.toString;
  3. var _types = {
  4. 'undefined': 'undefined',
  5. 'number': 'number',
  6. 'boolean': 'boolean',
  7. 'string': 'string',
  8. '[object Function]': 'function',
  9. '[object RegExp]': 'regexp',
  10. '[object Array]': 'array',
  11. '[object Date]': 'date',
  12. '[object Error]': 'error'
  13. };
  14. return _types[typeof o] || _types[_toString.call(o)] || (o ? 'object' : 'null');
  15. };

看到上面代码是不是觉得超简单?

这主要是因为函数中使用了Object.prototype.toString(),我们先看一下,ECMA对它的解释:

当toString()被调用时,javascript做了如下工作:

  1. Get the [[Class]] property of this object.

获取对象的类名(对象类型)

  1. Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.

  2. Return Result (2)

将[object、获取的类名]组合并返回。

为什么使用Object.prototype.toString而不是Function.prototype.toString或Array.prototype.toString呢?这是大家都知道的喽,Javascript中一切类型说到底都是对象。

利用Object.prototype.toString,各类型的返回值:

  1. var _toString = Object.prototype.toString;
  2. alert(_toString.call([123])); //[object Array]
  3. alert(_toString.call('123')); //[object String]
  4. alert(_toString.call({ a: '123' })); //[object Object]
  5. alert(_toString.call(function () { }));//[object Function]
  6. alert(_toString.call(/123/)); //[object RegExp]
  7. alert(_toString.call(new Date())); //[object Date]
  8. alert(_toString.call(123)); //[object Number]
  9. alert(_toString.call(undefined)); //[object Undefined]
  10. alert(_toString.call(null)); //[object Null]
版权声明:本站文章除特别声明外,均采用署名-非商业性使用-禁止演绎 4.0 国际 许可协议,如需转载,请注明出处

评论

  •