我正在尝试将打字稿中的循环对象字符串化。这是我的原始代码和错误:
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>
答案 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()
内的所有对象(及其子对象)。浏览器,找出哪个是“违规”对象。