5

変数が純粋な Object インスタンスかどうかを確認する必要があります。例: HTMLElement はinstanceof Object です。しかし、それが単なるオブジェクトであるかどうかを確認する必要があり{a: true, b: false}ます。配列を検証することはできません。

: Chrome の新しい機能を使用できます。

4

2 に答える 2

8

コンストラクタを確認してください。すべてのブラウザで動作するようです

if (a.constructor === Object)
// Good for arrays
([]).constructor === Object => false
// Good for HTMLElements
document.body.constructor === Object => false
于 2013-02-27T02:41:59.350 に答える
2
var proto = Object.getPrototypeOf(obj);

var protoproto = Object.getPrototypeOf(proto);

if (proto === Object.prototype && protoproto === null) {
    //plain object
}

nullプロトタイプを使用してオブジェクトを作成する場合は、 を削除して、またはprotoprotoと比較protoするだけです。Object.prototypenull

その危険性は、Object.prototypeそれ自体が渡されるのを防げず、おそらく偶発的にObject.prototype.


このように少し短くて安全です:

var proto = Object.getPrototypeOf(obj);

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

于 2013-02-27T02:45:04.153 に答える