如何在打字稿中字符串化循环对象?

时间:2019-05-01 09:38:37

标签: javascript angular typescript

我正在尝试将打字稿中的循环对象字符串化。这是我的原始代码和错误:

app.component.ts:

updateList(list: any) {
    this.demolist = Array.apply(this, list);
    console.log('List - ' + JSON.stringify(this.demolist));
}
  

TypeError:循环对象值

然后我在 updateList()方法中尝试了以下代码:

const getCircularReplacer = () => {
      const seen = new WeakSet();
      return (key, value) => {
        if (typeof value === "object" && value !== null) {
          if (seen.has(value)) {
            return;
          }
          seen.add(value);
        }
        return value;
      };
    };
      console.log(JSON.stringify(this.demolist, getCircularReplacer()));
}

但是现在我遇到了这个错误:

  

TypeError:toISOString属性不可调用

有人可以告诉我我需要做些什么才能显示 this.listBase 的内容?

这是我的HTML:

<upload #fileUpload (listChange)="updateList($event)" data-kind="primary" restrictFiles=".pdf,.doc,.docx">
</upload>

<list #listBase [IncludeComponent]="inputComponent" [list]="demolist">    
</list>

1 个答案:

答案 0 :(得分:0)

您得到的错误:

  

TypeError:toISOString属性不可调用

意味着某个对象的名为toISOString属性的某个地方已被调用,就好像它是一个方法一样。例如:

someObj.toISOString();

在Javascript中唯一可以内置并命名为toISOString的方法是Date.prototype.toISOString

JSON.stringify()知道一些标准值类型以及如何将它们转换(序列化)为字符串。通常,通过对它们调用预期存在的toString()方法来实现。它还知道Date对象具有toISOString()方法,并在找到任何方法时调用它。因此,在这种情况下,我假设JSON.stringify()this.demoList内遇到了一个对象,尽管该对象的类型为Date,但它具有定义为<{> 1 }}(而不是方法),它会覆盖现有的toISOString,并在此时尝试将其作为方法调用,并且会出现此错误。

在您的特定情况下,我无法猜测是哪个对象,因此建议您使用自己的开发人员工具逐一检查Date.prototype.toISOString()内的所有对象(及其子对象)。浏览器,找出哪个是“违规”对象。