2016-12-16 11 views
0

オブジェクトを「クローン」する機能があります。ブラウザのコンソールに「無効な文字」というエラーメッセージが表示されることがあります。 JSONオブジェクトのdocumentationに基づいて、この関数は完璧に動作するはずです。私もチェックして、シリアル化されているオブジェクトはtoJSON()関数を実装していません。どのような種類のオブジェクトがこのエラーの原因になりますか?JavaScriptオブジェクトのシリアライズ/デシリアライズ時に「無効な文字」エラーメッセージが表示される

function deepCopy (obj) { 
    return JSON.parse(JSON.stringify(obj)); 
} 

更新:唯一のIE11で発生するように見えます。

+0

jsonに解析する場合は、 'JSON.parse'だけを使用してください。' JSON.stringify'は不要です。 – Mairaj

+0

'obj'の値は何ですか? –

+0

[JavaScriptでオブジェクトを深くクローンする最も効率的な方法は何ですか?](// stackoverflow.com/q/122102) – Tushar

答えて

1

JSON.stringify(undefined)は、文字列 "undefined"の代わりにundefinedを返します。 MDNに見られるように:JSON.stringify(function(){})JSON.stringify(undefined)のような「純粋な」 値を渡すとき

JSON.stringifyもちょうどundefinedを返すことができます。

JSON.parseは、このオブジェクトを文字列に変換しようとするため、シリアル化できないオブジェクトを受け取ると、いくつかの不明なエラーメッセージが表示されます。 Chromeでこれまで多くの時間を失った:Unexpected token u in JSON at position 0

これは、uがundefinedの最初の文字が文字列に変換されたためです。オブジェクトを解析しようとすると、同様のエラーが発生します。文字列 "[object Object]"には有効な開始括弧が付きますが、予期しないトークンが続きます。これらのケースを念頭に置いておくとよいでしょう。

0

はい、値に'文字が含まれている場合は発生します。

だから、特別なキャラクターをきれいにしてください。別の方法は、文字列化する前にutf-8に変換しています。

こうして私は早く自分の問題を解決しました。

+0

"utf-8"に変換することをお勧めしますか? – Eric

+0

objの値は何ですか? – Darshak

+0

と仮定します。 var a = {}; a = {key: "val'ue"} val'ueから値を削除するか、値を変換することができます。function encode_utf8()戻り値unescape(encodeURIComponent(s)); } //デコード function decode_utf8(s){ return decodeURIComponent(escape(s)); } – Abdullah

関連する問題