gpt4 book ai didi

javascript - EcmaScript6 : strange behavior of console. 带有 WeakSet 参数的日志

转载 作者:行者123 更新时间:2023-11-29 11:01:32 26 4
gpt4 key购买 nike

如何解释以下内容:如果我们注释第一次调用 console.log,则 set.[[Entries]].length 将为 1,如果没有注释 set.[[条目]].length = 0;

输出:长度=0;

let mySet = new WeakSet(),
key = {};

mySet.add( key ); // add the object to the set

//console.log( mySet ); // uncommenting will change the [[Entries]].length
key = null; // delete key
console.log( mySet ); // [[Entries]].length: 0

输出:长度= 1

let mySet = new WeakSet(),
key = {};

mySet.add( key ); // add the object to the set

console.log( mySet ); // commenting will change the [[Entries]].length
key = null; // delete key
console.log( mySet ); // [[Entries]].length: 1

多一个版本:如果我们在第二种情况下(到脚本末尾)再添加一个 console.log( mySet )[[Entries]].length 将为 0

其中一位评论者提到它应该是垃圾收集器。但它在真实脚本中的表现如何?如果我将使用一次调用该对象(没有第二次),它是否会被删除(在对象将被设置为 null 之后)?

最佳答案

这一点也不奇怪,这只是 集合的标准行为。 [[Entries]] 是一个内部插槽,具有非常依赖于实现的行为,甚至可能不存在于实际实现中,而只是显示在调试器中。

一旦覆盖对象的 key 引用,它就会被垃圾回收,并且不会被 mySet 保存。 console.log 的自定义行为显然创建了对该对象的另一个引用(因为您仍然可以在控制台中与它交互)所以它没有被垃圾收集,并且仍然显示在列表中。

关于javascript - EcmaScript6 : strange behavior of console. 带有 WeakSet 参数的日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46153153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com