簡體   English   中英

為什么 JSON.stringify 為似乎具有屬性的對象返回空對象符號“{}”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM