- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
WeakSet 应该通过弱引用来存储元素。也就是说,如果某个对象未被任何其他对象引用,则应将其从 WeakSet 中清除。
我写了下面的测试:
var weakset = new WeakSet(),
numbers = [1, 2, 3];
weakset.add(numbers);
weakset.add({name: "Charlie"});
console.log(weakset);
numbers = undefined;
console.log(weakset);
即使我的 [1, 2, 3]
数组没有被任何东西引用,它也没有从 WeakSet 中删除。控制台打印:
WeakSet {[1, 2, 3], Object {name: "Charlie"}}
WeakSet {[1, 2, 3], Object {name: "Charlie"}}
这是为什么?
另外,我还有一个问题。像这样直接将对象添加到 WeakSets 有什么意义:
weakset.add({name: "Charlie"});
那些是 Traceur 的故障还是我遗漏了什么?
最后,如果我们甚至无法遍历它也无法获取当前大小,那么 WeakSet 的实际用途是什么?
最佳答案
it's not being removed from the WeakSet. Why is that?
很可能是因为垃圾收集器还没有运行。但是,您说您正在使用 Traceur,所以可能只是它们没有得到适当的支持。我想知道 console
无论如何都可以显示 WeakSet
的内容。
What is the point of adding objects to WeakSets directly?
将对象字面量添加到 WeakSet
中绝对没有意义。
What is the practical use of WeakSet if we cannot even iterate through it nor get the current size?
您所能获得的只是一点信息:集合中是否包含对象(或一般值)?
这在您想要“标记”对象而不实际改变它们(为它们设置属性)的情况下很有用。许多算法包含某种“如果 x
已被看到”条件(JSON.stringify
循环检测可能是一个很好的例子),并且当您与用户一起工作时 -建议使用 Set
/WeakSet
提供值。 WeakSet
的优点是它的内容可以在你的算法仍在运行时被垃圾收集,所以当你处理大量数据时它有助于减少内存消耗(甚至防止泄漏)这是懒惰地(甚至可能是异步地)产生的。
关于javascript - ECMA 脚本 6 : what is WeakSet for?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30556078/
和Set一样,WeakSet也是es6新增的一种数据结构,那么它和Set有什么区别呢? WeakSet对比Set主要是两个区别: WeakSet只能放置对象,不能是其他任何类型 WeakSet里面的保
在本教程中,您将借助示例了解 JavaScript Set 和 WeakSet。 JavaScript ES6引入了两种新的数据结构,Set 和 WeakSet。 Set 类似于数组,
我最近更新了一个 React Native 应用程序。但是,在我的大多数模块中,我都遇到了这个错误: # could not be cloned. 例如,在模块上:@react-native-mapb
WeakSet 应该通过弱引用来存储元素。也就是说,如果一个对象没有被其他任何东西引用,那么它应该从 WeakSet 中清除。 我编写了以下测试: var weakset = new WeakSet(
这是我注意到的一些奇怪的事情。由于使用了 WeakSet 并且显然没有其他引用存在,因此以下代码不应破坏内存: 'use strict'; require('babel-polyfill'); con
问题Safely iterating over WeakKeyDictionary and WeakValueDictionary并没有像我希望的那样让我放松,而且它已经足够老了,值得再次询问而不是评
我正在研究是否可以在 python 中实现简单的回调功能。我以为我可以为此使用 weakref.WeakSet,但显然我遗漏了一些东西或被误解了。正如您在代码中看到的那样,我首先尝试使用“ClassA
WeakSet 应该通过弱引用来存储元素。也就是说,如果某个对象未被任何其他对象引用,则应将其从 WeakSet 中清除。 我写了下面的测试: var weakset = new WeakSet(),
我想要一个 Flyweight 对象,因此我创建了一个对象并将其实例存储在 Map 中,如下所示: const FlyweightNumber = (function(){ "use stri
为什么在 WeakSet 中 .add() 一个 Symbol 是不可能的? var ws = new WeakSet(); var sym = Symbol(); ws.add(sym); //er
在尝试理解 JavaScript 的 WeakMaps/WeakSets 时,我阅读了 MDN 文档。 其中写道:“WeakSet 是弱的:对集合中对象的引用被弱保留。如果没有其他对存储在 WeakS
考虑一个说明性的例子: function addSafely(weakset, value) { if (canBeAddedToWeakSet(value)) { weaks
ECMAScript 6 有这些非常相似的集合:Set 和 WeakSet。它们有什么区别? 最佳答案 主要区别在于,对 Set 中对象的引用是强引用,而对 WeakSet 中对象的引用是弱引用。这意
我正在实现一个 WeakSet,它将其元素弱包装在 WeakWrapper 中,以免增加它们的保留计数。 我的问题是,如何创建一个迭代器,以便我可以迭代跳过那些已被释放的元素(即 nil)。 请注意,
已经有一些关于 map 和弱 map 的问题,像这样:What's the difference between ES6 Map and WeakMap?但我想问一下在什么情况下我应该赞成使用这些数据
为什么console.log将弱集显示为 ? [13:37:11] [~] node Welcome to Node.js v14.4.0. Type ".help" for more inform
如何解释以下内容:如果我们注释第一次调用 console.log,则 set.[[Entries]].length 将为 1,如果没有注释 set.[[条目]].length = 0; 输出:长度=0
我正在构建一个 NextJS 网站,它很棒,但它无法在 IE 10/11 中运行,因为某些代码未正确转译。我对 babel 和 webpack 很不熟悉,以前从来没有自己配置过它们。我已经尝试通过在线
#1。缺少 .size 属性的解决方法? 在 JavaScript 中,我以前从未使用过 WeakSet 或 WeakMap,而且我对垃圾收集一般不太了解(我是 PHP + JS 开发人员,所以这是我
我正在使用“react-native-vector-icons”:“^8.1.0”,我得到了这个错误 node_modules/react-native-vector-icons/lib/create
我是一名优秀的程序员,十分优秀!