以下示例显示JSON.stringify()
为SpeechSynthesisVoice对象返回字符串"{}"
:
var voiceObject = window.speechSynthesis.getVoices()[0];
JSON.stringify(voiceObject); //returns "{}"?
完整示例:JSFiddle
为什么它会返回"{}"
而不是"{voiceURI: "Google Deutsch", name: "Google Deutsch", lang: "de-DE", localService: false, default: false}"
?
请注意,上述示例不适用于chrome或iOS;它是Mozilla Firefox的目标。
答案 0 :(得分:14)
JSON.stringify
包含一个对象的拥有的,可枚举的属性(spec),这些属性的值不是函数或undefined
(因为JSON没有那些),遗漏了它从原型继承的那些,任何被定义为不可枚举的,以及任何其值是函数引用或undefined
的。
很明显,从getVoices()[0]
返回的对象没有可以用JSON表示的自己的可枚举属性。它们的所有属性必须是继承的,定义为不可枚举的,或者(尽管可能不是这里的情况)函数或undefined
。
答案 1 :(得分:0)
您可以通过以下方法解决此问题:
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Custom" = Table.AddColumn(Source, "total-order", (i) => List.Sum(Table.SelectRows(Source, each ([order] = i[order]))[amount]), type number )
in #"Added Custom"
...但是请记住,如果您要求对象是特定类型,则对象类型将会更改。
答案 2 :(得分:0)
T.J Crowder的答案对我有用,我正在创建这样的对象:
Object.defineProperties(completeObj, {
[attributeName]: {
value: finalValue
}
});
我为此进行了更改,问题得以解决:
Object.defineProperties(completeObj, {
[attributeName]: {
value: finalValue,
enumerable: true
}
});