检查是否为对象

Check if is an Object

本文关键字:对象 是否 检查      更新时间:2023-09-26

我需要检查一个变量是否是纯Object实例。例如:HTMLElement是对象的实例。但我真的需要检查它是否像{a: true, b: false}一样只是一个对象。它不能验证数组。

注意:如果更好的话,我可以使用Chrome的更新功能

检查构造函数。似乎适用于所有浏览器

if (a.constructor === Object)
// Good for arrays
([]).constructor === Object => false
// Good for HTMLElements
document.body.constructor === Object => false
var proto = Object.getPrototypeOf(obj);
var protoproto = Object.getPrototypeOf(proto);
if (proto === Object.prototype && protoproto === null) {
    //plain object
}

如果要使用null原型创建对象,可以去掉protoproto,只需将protoObject.prototypenull进行比较。

这样做的危险在于,它不能防止Object.prototype本身被传递,可能会导致Object.prototype的意外扩展。


像这样更短更安全:

var proto = Object.getPrototypeOf(obj);
if (proto && Object.getPrototypeOf(proto) === null) {
    // plain object
}