次の例は、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では機能しません。MozillaFirefoxを対象としています。
_JSON.stringify
_には、関数またはundefined
ではない値を持つオブジェクトのown、enumerableプロパティ( spec )が含まれます(JSONにはそれらがないため)、プロトタイプから継承するもの、列挙不可能として定義されているもの、および値が関数参照またはundefined
であるものは除外します。
明らかに、getVoices()[0]
から返されるオブジェクトには、JSONで表すことができる独自の列挙可能なプロパティがありません。それらのすべてのプロパティは、継承されるか、列挙不可能として定義されるか、(ここではおそらくそうではありませんが)関数またはundefined
のいずれかである必要があります。
これを修正するには、次のようにします。
var voiceObject = window.speechSynthesis.getVoices()[0];
var newvoiceObject = $.extend(newvoiceObject,voiceObject);
JSON.stringify(newvoiceObject); //returns correct JSON string
...ただし、オブジェクトが特定のタイプである必要がある場合は、オブジェクトタイプが変更されることに注意してください。