Как эффективно проверить, является ли переменная массивом или объектом (в NodeJS и V8)?

Есть ли способ эффективно проверить, является ли переменная объектом или массивом, в NodeJS и V8?

Я пишу модель для MongoDB и NodeJS, и для обхода дерева объектов мне нужно знать, является ли объект простым (Number, String, ...) или составным (Hash, Array).

Кажется, что V8 имеет быстрый встроенный Array.isArray , но как проверить, является ли объект объектом? Я имею в виду сложный объект, такой как hash {} или экземпляр класса, а не что-то вроде new String () ?

Обычно это можно сделать так:

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

или так:

object === Object(object)

Но вроде операции недешевые, может быть, есть более эффективные? Ничего страшного, если он не универсален и работает не на всех двигателях, мне он нужен только для работы с V8.

42
задан Alexey Petrushin 12 January 2012 в 11:17
поделиться