我需要检查一个变量是否是纯对象实例。例如:HTMLElement是Object的实例。但我真正需要检查的是它是否仅仅是一个对象,比如{a: true, b: false}。它不能验证一个数组。
注意:如果更好,我可以使用Chrome的新功能。
注意:如果更好,我可以使用Chrome的新功能。
检查构造函数。似乎在所有浏览器中都能正常工作
if (a.constructor === Object)
// Good for arrays
([]).constructor === Object => false
// Good for HTMLElements
document.body.constructor === Object => false
var a = []; a.constructor = Object; o.constructor === Object; // true
- RobGobject.__proto__
,但我想这样会使某些东西成为一个对象吧? - Ruan MendesMyCtor.prototype = {myMethod: function() {}, ...}
。 - the systemvar proto = Object.getPrototypeOf(obj);
var protoproto = Object.getPrototypeOf(proto);
if (proto === Object.prototype && protoproto === null) {
//plain object
}
null
的对象,可以去掉 protoproto
,只需将 proto
与 Object.prototype
或 null
进行比较。但这样做的危险在于它不防止被传递给本身的 Object.prototype
,可能会意外扩展 Object.prototype
。var proto = Object.getPrototypeOf(obj);
if (proto && Object.getPrototypeOf(proto) === null) {
// plain object
}
object.__proto__ === Object.prototype
。但绝对不建议在普通网页中这么做。 - RobGOwn properties are enumerated firstly
,它不仅没有任何相关标准的依据,而且在实践中被证明是错误的。它之所以不会导致错误的唯一原因可能是以下行很少被执行(或者根本不会被执行)。 - RobG