javascript中类型的判断

大家都知道javascript中分为原始(值)类型和对象(引用)类型

  1. 原始类型:Null、Undefined、Boolean、String、Number
  2. 对象类型:Object

对象类型又可以基本分为三大类:原生对象、宿主对象和浏览器扩展对象,可参考下图:

那么如何准确地判别各种类型呢?

js判别类型的方式主要有以下几种:
1. typeof
2. Instanceof
3. Object.prototype.toString.call
4. constructor

下面分别针对这些判别方式做一下总结:

typeof

  • 可以识别标准类型(Null除外)
  • 不能识别具体的对象了类型(Function除外)

Instanceof

  • 判别内置对象类型
  • 不能判别原始类型
  • 判别自定义对象类型

Object.prototype.toString.call

  • 可以识别标准类型以及内置对象类型
  • 不能识别自定义对象类型

constructor

  • 判别标准类型(Null和Undefined除外)
  • 判别内置对象类型
  • 判别自定义对象类型

我们可以自己封装一个方法去判别所有的类型

1
2
3
4
5
function getConstructorName(obj){
return obj &&
obj.constructor &&
obj.prototype.toString.match(/function\s*([^(]*)/)[1]
}