在NodeJS&V8?

我正在为MongoDB和NodeJS编写一个模型,要遍历对象树,我需要知道对象是否简单(数字、字符串等)或复合(散列、数组).

V8似乎内置了fast Array.isArray,但如何判断对象是否为对象?我的意思是像hash {}或类的实例这样的复杂对象,而不是像new String()这样的东西?

通常可以这样做:

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

或者这个:

object === Object(object)

但这项业务似乎并不便宜,也许还有更高效的?如果它不是通用的,不能在所有发动机上工作,那也没关系,我只需要在V8上工作.

推荐答案

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

Object.prototype.toString.call(object)是区分普通对象和其他内置类实例的最佳 Select ,因为object === Object(object)在这里不起作用.然而,我看不出你需要做你正在做的事情的原因,所以如果你分享这个用例,也许我可以提供更多的帮助.

Node.js相关问答推荐

当建议在第二代上运行云功能时,现在是否有新的Firestore AdminClient可供使用?

如何在mongodb集合中设置数据限制?

FireStore事务似乎已允许并发编辑?

在内存中加载安全密钥安全吗?还是每次都从文件中读取?

如何防止Socket-io实例化React/Next.js中的两个套接字(当前在服务器*和*客户端实例化)

如何使用NodeJS在mongodb中更新文档

如何使用 node.js 将两个或多个 API 请求组合成一个端点并表达

为什么当我使用waitForSelector时 Puppeteer 导致我的测试套件挂起 30 秒,即使我在页面和浏览器上调用关闭?

在 React 和 Socket.io 中使用 Effect 钩子重新渲染两次

如何让 vscode 假设一个 node.js 上下文,以便它不假设 `fetch` 存在?

如何在 node.js 环境中从 WebAssembly (Rust) 调用异步 JavaScript 导入函数?

Handlebars:访问已被拒绝解析来自的属性,因为它不是其父级的自己的属性

yarn.lock 和 npm 的 package-lock 有什么区别?

Aptana Studio 是否有 NodeJS 插件?

从 CoffeeScript 中的数组中删除一个值

运行摩卡+伊斯坦布尔+通天塔

遍历 NodeJS 中的一系列日期

安装Node.js 安装n 安装Node.js?

如何在express 中设置默认路径(路由前缀)?

我无法全局安装 nodemon,nodemon无法识别