对象 · 类 · 之间的判断
判断一个对象是否属于某各类?
这个问题好熟悉,似乎很多人第一时间想到instanceOf,可是它在Array和Object之间判断就很不准确了:

所以在这里介绍两种方法:
- object.constructor
- Object.prototype.toString.call(obj)
object.constructor
object.constructor :返回创建实例对象的 Object 构造函数的引用。
这个方法判断会比较准确:1
2
3
4
5
6
7
8
9
10
11
12
13
14var o = {};
o.constructor === Object; // true
var o = new Object;
o.constructor === Object; // true
var a = [];
a.constructor === Array; // true
var a = new Array;
a.constructor === Array // true
var n = new Number(3);
n.constructor === Number; // true
toString
1 | var a = [1,2,3] |
这个方法调用会比较麻烦,所以推荐封装一个函数:
比如:1
2
3
4
5
6
7
8
9var isType = function(type) {
return function(obj) {
return Object.prototype.toString.call(obj) === '[object '+ type + ']';
}
}
var isArray = isType('Array')
var isObject = isType('Object')
isArray([]) // true
isObject([]) // false