一尘不染

如何有效检查变量是数组还是对象(在NodeJS和V8中)?

node.js

在NodeJS和V8中,有什么方法可以有效地检查变量是Object还是Array?

我正在为MongoDB和NodeJS编写模型,并遍历对象树,我需要知道对象是简单对象(数字,字符串,…)还是复合对象(哈希,数组)。

似乎V8具有快速内置的功能Array.isArray,但是如何检查object是否为Object?我的意思是像哈希{}或类实例这样的复杂对象,不是new String()吗?

通常可以这样做:

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

或这个:

object === Object(object)

但是,似乎这种操作并不便宜,也许有一些更有效的方法?如果它不是通用的并且不能在所有引擎上都可以,那是可以的,我只需要在V8上即可。


阅读 248

收藏
2020-07-07

共1个答案

一尘不染

所有对象都是ObjectECMAScript
中至少一个类的实例。您只能使用来区分内置类实例和普通对象Object#toString。它们都是具有相同级别的复杂性,例如,无论是使用{}还是使用new运算符创建的。

Object.prototype.toString.call(object)最好区分正常对象和其他内置类的实例,object === Object(object)这在这里不起作用。但是,我看不出您需要做什么的原因,因此,如果您共享用例,我可能会提供更多帮助。

2020-07-07