检查JS对象类型的最准确方法是什么?

2022-08-30 02:20:29

运算符并不能真正帮助我们找到对象的真实类型。typeof

我已经看到了下面的代码:

Object.prototype.toString.apply(t)  

问题:

这是检查对象类型的准确方法吗?


答案 1

JavaScript 规范给出了一种确定对象类的正确方法:

Object.prototype.toString.call(t);

http://bonsaiden.github.io/JavaScript-Garden/#types


答案 2

这是一个好方法,但它的性能是最差的。Object.prototype.toString

http://jsperf.com/check-js-type

check js type performance

用于解决一些基本问题(字符串,数字,布尔值...),并用于解决一些复杂问题(如数组,日期,正则表达式)。typeofObject.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"