简体   繁体   中英

ES6: console.log on WeakSet gives <item unknown>

Why does console.log display WeakSet as <items unknown> ?

[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

Context: I came across below example on WeakSet in ES6.

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

The example suggests it should print

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

But in node v14.4.0 it prints

WeakSet { <items unknown> }

The node-js team decided that its hard to correctly implement that. Here is the issue: https://github.com/nodejs/node/issues/19001

So that mean that WeakSet work correctly BUT console.log will always output an empty WeakSet

If you still wanna inspect the WeakMap you can do that by using 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 }));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM