【问题标题】:ES6: console.log on WeakSet gives <item unknown>ES6:WeakSet 上的 console.log 给出 <item unknown>
【发布时间】:2020-06-21 17:38:59
【问题描述】:

为什么console.log 将WeakSet 显示为&lt;items unknown&gt;

[13:37:11] [~] node
Welcome to Node.js v14.4.0.
Type ".help" for more information.
> let student1 = { name: 'James', age: 26 };
undefined
> let student2 = { name: 'Julia', age: 27 };
undefined
> const roster = new WeakSet([student1, student2]);
undefined
> console.log(roster);
WeakSet { <items unknown> }
undefined

上下文:我在 ES6 中的 WeakSet 上遇到了以下示例。

let student1 = { name: 'James', age: 26 };
let student2 = { name: 'Julia', age: 27 };
const roster = new WeakSet([student1, student2]);
console.log(roster);

这个例子表明它应该打印

WeakSet {Object {name: 'Julia', age: 27}, Object {name: 'Richard', age: 31}}

但在节点 v14.4.0 中它会打印

WeakSet { <items unknown> }

【问题讨论】:

  • 你在哪里找到这个例子?您在 MDN 上链接的页面注释“集合中没有存储当前对象的列表。WeakSets 不可枚举。
  • @Bergi 这是我正在查看的Udacity ES6 course 的一部分。这是一门免费课程,但我认为该链接仅在您登录后才有效。我想知道 WeakSet 的用例,而您的 answer to another question 帮助了。现在我确信我不能(也不应该)枚举/循环遍历 WeakSet。谢谢。

标签: javascript ecmascript-6


【解决方案1】:

node-js 团队认为很难正确实现这一点。 这是问题:https://github.com/nodejs/node/issues/19001

这意味着 WeakSet 可以正常工作,但 console.log 将始终输出一个空的 WeakSet

如果您仍想检查 WeakMap,您可以使用 utils inspect 来做到这一点:

const { inspect } = require('util');
let student1 = { name: 'James', age: 26 };
let student2 = { name: 'Julia', age: 27 };
const weakSet = new WeakSet([student1, student2]);
console.log(inspect(weakSet, { showHidden: true }));

【讨论】:

    猜你喜欢
    • 2015-12-19
    • 1970-01-01
    • 2014-01-31
    • 2018-09-06
    • 2017-05-07
    • 1970-01-01
    • 2017-11-19
    • 2016-05-20
    • 1970-01-01
    相关资源
    最近更新 更多