在NodeJS和V8中,有什么方法可以有效地检查变量是Object还是Array?
我正在为MongoDB和NodeJS编写模型,并遍历对象树,我需要知道对象是简单对象(数字,字符串,…)还是复合对象(哈希,数组)。
似乎V8具有快速内置的功能Array.isArray,但是如何检查object是否为Object?我的意思是像哈希{}或类实例这样的复杂对象,不是new String()吗?
Array.isArray
{}
new String()
通常可以这样做:
Object.prototype.toString.call(object) == "[object Object]"
或这个:
object === Object(object)
但是,似乎这种操作并不便宜,也许有一些更有效的方法?如果它不是通用的并且不能在所有引擎上都可以,那是可以的,我只需要在V8上即可。
所有对象都是ObjectECMAScript 中至少一个类的实例。您只能使用来区分内置类实例和普通对象Object#toString。它们都是具有相同级别的复杂性,例如,无论是使用{}还是使用new运算符创建的。
Object
Object#toString
new
Object.prototype.toString.call(object)最好区分正常对象和其他内置类的实例,object === Object(object)这在这里不起作用。但是,我看不出您需要做什么的原因,因此,如果您共享用例,我可能会提供更多帮助。
Object.prototype.toString.call(object)