在过去的一年里,我在这里和那里花了 10 或 20 分钟可能有十几次,但从未找到这个问题的万无一失的答案。
如何检查 JavaScript 对象是否是 的实例Object
,而不是子类?
一个用例是检查是否arguments[0]
是“选项”哈希与“模型”(MVC),两者都扩展了 native Object
,但应该区别对待。
我试过这些:
// some helper to get constructor name
function klassName(fn) {
if (fn.__name__) {
return fn.__name__;
}
if (fn.name) {
return fn.name;
}
return fn.toString().match(/\W*function\s+([\w\$]+)\(/));
};
var Model = function() {};
m = new Model;
o = {};
Object(o) === o; // true
Object(m) === m; // true, thought it might be false
klassName(o.constructor); // Object
klassName(m.constructor); // Model
这klassName(m.constructor)
在某些情况下不起作用(不记得确切,但可能是一个 regex.constructor,类似的东西)。也许确实如此,不确定。
有没有一种防弹的方法来判断某物是否是{}
物体?