javascript - 具有 Set 集合的类方法不返回任何内容

标签 javascript typescript class methods

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);
  

第一个控制台日志返回按预期创建的集合,但第二个控制台日志仅返回 { contas: {} }。我想知道为什么这只发生在 SET 和 MAP 中。

最佳答案

这里没有什么问题。您所看到的是您正在使用的工具如何决定表示其输出。

在 TS Playground 中,您会看到以下内容:

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

因此,不同的工具在控制台输出中以不同的方式表示 Set,并且当 Set 位于 JavaScript 对象内部时,其中一些工具会更改该表示形式。无论如何,该集合应该继续像集合一样工作。

如果您要构建此对象以作为 JSON 字符串发送,请注意 Set 对象的 JSON 表示形式就是 {}。因此,您可能需要将其转换为可序列化的内容,例如数组,您可以使用扩展运算符来完成此操作:

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

关于javascript - 具有 Set 集合的类方法不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76773784/

相关文章:

javascript - 在 Mac OS X 上自动全屏打开 Chrome

javascript - Rails,点击 link_to 帮助程序后 javascript 未加载

javascript - react 中没有构造函数的初始状态

javascript - 为什么两个 JS 日期对象实例化不同?

objective-c - 为什么 NSRect、NSPoint 等是结构体,而不是类?

c# - 未知数量类型参数的类设计

javascript - 如何获取超过255个字符的邮件正文?

angular - 如何直接将 HTTP 响应分配给 Angular 中的接口(interface)模型类型

javascript - 在 angular2 中的另一个元素的 `focus` 之后不能为 `blur`

CSS - 完全相同的类但背景颜色不同,搞砸了