javascript - 是否可以将 javascript 引用转换为数字或哈希和?

标签 javascript node.js

假设您要比较两个 javascript 对象或数组的引用相等性。

最明显的解决方案是

if (a === b) { /*...*/ };

问题在于 ab 必须保存对实际对象的引用。在相同的情况下,这可能是一个问题。例如,尝试在内存函数中保存实际引用会造成内存泄漏。

一种方法是使用 JSON.stringify(a) 获取对象的字符串表示形式并进行比较。但在某些用例中,这可能会非常昂贵。更不用说没有考虑实际的引用相等性。

这让我很疑惑。有没有办法将实际引用而不是对象内容字符串化?显然,您不能在 javascript 中操作指针,但是如果您只能获得某种指针表示形式呢?哈希和?原始内存位置? GUID 还是整数表示?

我知道在 chrome 开发工具中分析内存转储时有一些对象 ID。也许这些东西可以在运行时访问?在 node.js 中使用某种特殊开关?

谁能想出一种用 javascript 完成这项工作的方法?

最佳答案

如果你想用它来内存(缓存),你应该使用 ES6 WeakMap .它适用于 Firefox 6、Chrome 36 和 IE 11。

The WeakMap object is a collection of key/value pairs in which the keys are objects and the values can be arbitrary values. [...] The experienced JavaScript programmer will notice that this API could be implemented in JavaScript with two arrays (one for keys, one for values) shared by the four API methods. Such an implementation would have two main inconveniences. The first one is an O(n) search (n being the number of keys in the map). The second one is a memory leak issue.

它的工作方式类似于 Java 中的 map - 您可以使用任意对象作为键和值。但是键不会阻止垃圾回收,所以你不必担心内存泄漏,但仍然可以找到给定对象的内存计算。

关于javascript - 是否可以将 javascript 引用转换为数字或哈希和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25722705/

相关文章:

javascript - jQuery 插件中的函数调用

javascript - 使用 HTML2CANVAS 将 Morris 图表保存为图像

javascript - 查找函数的调用者

javascript - javascript/node.js 中的 JSONP 解析

javascript - nodejs express在另一个文件中重用路由get方法

mysql - Node +Mysql : How to execute more queries based on another query

node.js - 在express js中转发查询

javascript - 页面加载时的缓动效果

javascript - 诗乃类型错误 : Attempted to wrap <method> which is already wrapped when running multiple scripts

javascript - 如何从网络选项卡中隐藏数据?