[英]Why does JSON.stringify return empty object notation “{}” for an object that seems to have properties?
以下示例顯示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 的。
JSON.stringify
包含對象自己的可枚舉屬性 ( spec ),這些屬性的值不是函數或undefined
(因為 JSON 沒有這些值),不包括從其原型繼承的值,以及任何定義為不可枚舉的屬性, 以及任何其值為函數引用或undefined
。
很明顯,您從getVoices()[0]
返回的對象沒有可以用 JSON 表示的自己的可枚舉屬性。 它們的所有屬性都必須是繼承的,定義為不可枚舉的,或者(盡管這里可能不是這種情況)函數或undefined
。
您可以通過執行以下操作來解決此問題:
var voiceObject = window.speechSynthesis.getVoices()[0];
var newvoiceObject = $.extend(newvoiceObject,voiceObject);
JSON.stringify(newvoiceObject); //returns correct JSON string
...但請記住,如果您要求對象為特定類型,則對象類型會發生變化。
TJ Crowder 的答案對我有用,我正在像這樣創建我的對象:
Object.defineProperties(completeObj, {
[attributeName]: {
value: finalValue
}
});
我為此進行了更改,問題解決了:
Object.defineProperties(completeObj, {
[attributeName]: {
value: finalValue,
enumerable: true
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.