La façon la plus efficace de vérifier si la variable est Tableau ou d'un Objet (en NodeJS & V8)?

Est-il un moyen efficace de vérifier si la variable est un Objet ou un Tableau, en NodeJS & V8?

Je suis en train d'écrire un Modèle pour MongoDB et NodeJS, et de parcourir l'arborescence de l'objet j'ai besoin de savoir si l'objet est simple (Nombre, Chaîne, ...) ou composite (Hachage, Array).

Il semble que le V8 a vite intégré dans Array.isArray, mais comment faire pour vérifier si l'objet est un Objet? Je veux dire objet complexe comme hachage {} ou une instance de la classe, et pas quelque chose comme new String()?

Habituellement, il peut être fait comme ceci:

Object.prototype.toString.call(object) == "[object Object]"

ou ceci:

object === Object(object)

Mais il semble que ces opérations ne sont pas bon marché, peut-être il y a un peu plus efficace? C'est ok si il n'est pas universel et ne fonctionne pas sur tous les moteurs, j'en ai besoin seulement de travailler sur la V8.

  • Merci pour l'aide, par la façon dont le modèle lui-même est ici alexeypetrushin.github.com/mongo-model/presentations/...
  • Ces deux opérations devraient être assez bon marché. Si vous voulez savoir si quelque chose peut être utilisé comme un objet (peut obtenir/définir des propriétés, etc.) utilisation x === Object(x) mais si vous voulez des tests plus précis, utilisez Object.prototype.toString.call(x). Ne vous inquiétez pas à propos de la vitesse de la soit un, pas sans profilage d'abord.
  • Est-il une raison typeof x est un mauvais choix? Il sera de retour "chaîne" pour une chaîne de caractères et 'objet' d'un objet.
  • typeof [] retourne "object"
  • Double Possible de Vérifier si une valeur est un objet en JavaScript