当前位置: 首页 > 面试题库 >

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

黎腾
2023-03-14
问题内容

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

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

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

通常可以这样做:

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

或这个:

object === Object(object)

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


问题答案:

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

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



 类似资料:
  • 问题内容: 我有一个具有几个命​​令的应用程序。当您键入某个命令时,您必须输入有关某物/某人的其他信息。现在,根据情况,信息必须严格为整数或字符串。 但是,无论您使用raw_input()在Python中键入的内容实际上是一个字符串,无论如何,更具体地讲,我很快会不加尝试地……除非查看变量是否由数字或字符组成? 问题答案: 我认为您有两种选择: 只需尝试将其转换为,但要捕获异常: except V

  • 我有一个Typescript项目,我需要知道变量的值是否在对象的任何属性中。 这就是目标: 这是声明的变量: 以下是我检查它是否存在的步骤: 问题:做三次检查会在其他机器上运行三次 我需要知道的是,如何检查它是否存在,而不需要迭代对象,如果它不存在,只需操作一次

  • 问题内容: 有谁知道如何检查JavaScript中的变量是数字还是字符串? 问题答案: 如果你处理的文字符号,而不是构造函数,你可以使用typeof运算。 如果您是通过构造函数创建数字和字符串,比如,你应该记住,可能会返回了。 检查类型的更简单的方法可能是利用在underscore.js中找到的方法可以在[此处找到带注释的源代码), 这将返回以下布尔值:

  • 问题内容: 这就是我通常做,以确定输入是一个/ -但不是。因为很多时候我偶然发现了一个错误,即一个函数错误地传递了一个对象,而目标函数确实假设这实际上是一个or 。 我的问题是:是否有更好的方法来实现这一目标? 问题答案: 仅在python 2中(不是python 3): 实际上就是您想要的,否则您会错过很多像列表一样的东西,但它们不是or的子类。

  • 问题内容: 我正在尝试编写一个接受字符串列表或单个字符串的函数。如果它是一个字符串,那么我想将其转换为仅包含一项的数组,因此我可以遍历它而不必担心错误。 那么,如何检查变量是否为数组? 我整理了以下各种解决方案,并创建了jsperf测试。它们都非常快,因此只需使用- 现在得到了很好的支持,并且可以跨框架使用。 问题答案: 在现代浏览器中,您可以 受Chrome5,Firefox 4.0,IE 9,

  • 问题内容: 我想检查一个变量在JavaScript中是数组还是单个值。 我找到了可能的解决方案… 这是最好的方法吗? 问题答案: 有几种检查变量是否为数组的方法。最好的解决方案是您选择的解决方案。 这是Chrome上最快的方法,很可能是所有其他浏览器上的方法。所有数组都是对象,因此检查构造函数属性对于JavaScript引擎来说是一个快速的过程。 如果在确定对象属性是否为数组时遇到问题,则必须首先