typeof test === "object"
的判断方法存在以下缺陷:
- 对于
null
的判断会出现错误,因为null的typeof值也是"object"; - 对于数组(Array)和函数(Function),也会被判断为对象;
可以使用Object.prototype.toString.call(test)
的方式来避免这些问题,例如:
var test = null;
console.log(Object.prototype.toString.call(test)); // "[object Null]"
test = {};
console.log(Object.prototype.toString.call(test)); // "[object Object]"
test = [];
console.log(Object.prototype.toString.call(test)); // "[object Array]"
test = function(){};
console.log(Object.prototype.toString.call(test)); // "[object Function]"
这种方法返回对象的完整的类型信息,可以避免上述缺陷。