//判断是否为函数 function isFunction(it) { return Object.prototype.toString.call(it) === '[object Function]'; } //判断是否为数组 function isArray(it) { return Object.prototype.toString.call(it) === '[object Array]'; } //判断各种类型的基函数 function isType(type) { return function(obj) { return Object.prototype.toString.call(obj) === "[object " + type + "]"; } } //借助以下四个方法来判断: 比如 isObject({a:1, b:2}) var isObject = isType("Object"); var isString = isType("String"); var isArray = Array.isArray || isType("Array"); var isFunction = isType("Function");
ECMAScript 3:
在Object.prototype.toString方法被调用时,会执行以下的操作步骤:
-
获取this对象的[[Class]]属性的值;
-
计算出"[object ", 第1步的操作结果Result(1),以及 "]"连接后的新字符串.
-
返回第2步的操作结果Result(2).
ECMAScript 5:
在Object.prototype.toString方法被调用时,会执行以下的操作步骤:
-
如果this的值为undefined,返回
"[object Undefined]"
. -
如果this的值为null,返回
"[object Null]"
. -
让O成为调用ToObject(this)的结果.
-
让class成为O的内部属性[[Class]]的值.
-
返回"[object ",class, 以及 "]"连接后的新字符串.
兼容性:
为了兼容ie6这类比较古老的游览器,Object.prototype.toString.call(obj) 通常用作"Boolean Number String Function Array Date RegExp Object"这8种数据类型的判断。
null 和 undefined 建议不要用Object.prototype.toString.call(obj)来判断。