JavaScript中使用`typeof test === object`有哪些问题?如何规避这些问题?

4 min read

typeof test === "object"的判断方法存在以下缺陷:

  1. 对于 null 的判断会出现错误,因为null的typeof值也是"object";
  2. 对于数组(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]"

这种方法返回对象的完整的类型信息,可以避免上述缺陷。