检查JS对象类型的最准确方法是什么?
2022-08-30 02:20:29
运算符并不能真正帮助我们找到对象的真实类型。typeof
我已经看到了下面的代码:
Object.prototype.toString.apply(t)
问题:
这是检查对象类型的最准确方法吗?
运算符并不能真正帮助我们找到对象的真实类型。typeof
我已经看到了下面的代码:
Object.prototype.toString.apply(t)
问题:
这是检查对象类型的最准确方法吗?
JavaScript 规范给出了一种确定对象类的正确方法:
Object.prototype.toString.call(t);
这是一个好方法,但它的性能是最差的。Object.prototype.toString
http://jsperf.com/check-js-type
用于解决一些基本问题(字符串,数字,布尔值...),并用于解决一些复杂问题(如数组,日期,正则表达式)。typeof
Object.prototype.toString
这是我的解决方案:
var type = (function(global) {
var cache = {};
return function(obj) {
var key;
return obj === null ? 'null' // null
: obj === global ? 'global' // window in browser or global in nodejs
: (key = typeof obj) !== 'object' ? key // basic: string, boolean, number, undefined, function
: obj.nodeType ? 'object' // DOM element
: cache[key = ({}).toString.call(obj)] // cached. date, regexp, error, object, array, math
|| (cache[key] = key.slice(8, -1).toLowerCase()); // get XXXX from [object XXXX], and cache it
};
}(this));
用作:
type(function(){}); // -> "function"
type([1, 2, 3]); // -> "array"
type(new Date()); // -> "date"
type({}); // -> "object"