class a {

    public COUNTS = new Set<string>();

    constructor() {
    }

    public execute(): any {

        this.COUNTS.add('a');
        this.COUNTS.add('b');

        console.log(this.COUNTS);

        return { contas: this.COUNTS };
    }

}

const x = (new a()).execute();

console.log(x);
  

第一个控制台日志(log)返回预期创建的集合,第二个日志(log)仅返回{contas:{}}.我想知道为什么这只发生在布景和 map 上.

推荐答案

这没什么不对的.您所看到的是您正在使用的工具如何决定表示其输出.

在TS操场上,您可以看到:

enter image description here

但是,如果将编译后的JavaScript代码放在StackOverflow的代码片段中,您会看到以下内容:

enter image description here

class a {
constructor() {
    this.COUNTS = new Set();
}
execute() {
    this.COUNTS.add('a');
    this.COUNTS.add('b');
    console.log(this.COUNTS);
    return { contas: this.COUNTS };
}
}
const x = (new a()).execute();
console.log(x);

但如果您打开Chrome开发工具并查看控制台输出,您会看到以下内容:

enter image description here

因此,不同的工具似乎在控制台输出中以不同的方式表示集,其中一些工具在集位于一个JavaScript对象内时更改了这种表示.无论如何,SET应该继续像SET一样工作.

如果要构建该对象以作为JSON字符串发送,请注意Set对象的JSON表示只有{}.因此,您可能需要将其转换为可序列化的内容,如数组,这可以使用Swike操作符来完成:

return { contas: [...this.COUNTS] };

Javascript相关问答推荐

通过JavaScript将CSS与音频大声噪音同步

在类型脚本中使用浏览器特定属性的正确方法是什么?

如何在Jest中调用setupFile下列出的文件所需的函数?

有条件的悲剧

Promise Chain中的第二个useState不更新

MathJax可以导入本地HTML文档使用的JS文件吗?

获取Uint8ClampedArray中像素数组的宽度/高度

JS:XML insertBefore插入元素

JQuery Click事件不适用于动态创建的按钮

更新动态数据中对象或数组中的所有值字符串

如何在Angular拖放组件中同步数组?

创建以键值对为有效负载的Redux Reducer时,基于键的类型检测

为什么可选参数的顺序会导致问题?

如何利用CSS中的隐藏元素实现平滑扩展和防止网格行间隙

Next.js中的服务器端组件列表筛选

无法重定向到Next.js中的动态URL

图表4-堆叠线和条形图之间的填充区域

在查看网页时,如何使HTML中的按钮工作方式类似于鼠标上的滚轮或箭头键?

无法检索与Puppeteer的蒸汽游戏的Bundle 包价格

JavaScript -复制到剪贴板在Windows计算机上无效