Есть ли способ эффективно проверить, является ли переменная объектом или массивом в NodeJS и V8?
Я пишу модель для MongoDB и NodeJS, и для обхода дерева объектов мне нужно знать, является ли объект простым (число, строка,...) или составным (хэш, массив).
Кажется, что V8 имеет быстрый встроенный Array.isArray
, но как проверить, является ли объект объектом? Я имею в виду сложный объект, такой как хэш {}
или экземпляр класса, а не что-то вроде new String()
?
Обычно это можно сделать так:
Object.prototype.toString.call(object) == "[object Object]"
или это:
object === Object(object)
Но, похоже, эта операция стоит недешево, может, есть что-то поэффективнее? Ничего страшного, если он не универсален и не работает на всех двигателях, мне он нужен только для работы с V8.
x === Object(x)
, но если вы хотите более детальное тестирование, используйтеObject.prototype.toString.call(x)
. Не беспокойтесь о скорости ни того, ни другого, предварительно не профилировав его. - person Pauan   schedule 04.02.2013typeof x
— плохой выбор? Он вернет «строку» для строки и «объект» для объекта. - person JD.   schedule 27.01.2015typeof []
возвращает"object"
- person xiix   schedule 10.07.2015