ホームページ  >  記事  >  ウェブフロントエンド  >  Chrome_json での JSON.parse の特別な実装

Chrome_json での JSON.parse の特別な実装

WBOY
WBOYオリジナル
2016-05-16 18:12:091171ブラウズ

IE8/Firefox3.5/Chrome4/Safari4/Opera10ではこの方法が実装されています。使用法は非常に簡単です:

コードをコピー コードは次のとおりです:

var str = '{"name ":"jack"}';
var json = JSON.parse(str);

が使用されます。このメソッドを実装するブラウザでは「jack」がポップアップ表示されます。
JSON を解析するメソッドを Object.prototype に追加する場合 (これを実行してネイティブ オブジェクトを汚染することに強く反対する人もいるかもしれません。これは単に議論のためです)

コードをコピーします コードは次のとおりです。
Object.prototype.parseJSON = function () {
return JSON.parse(this); }


すべてのオブジェクトは Object のメソッドを継承するため、この時点でそれらを直接使用できます。


var str = '{"name":"jack"}';
var json = str.parseJSON(); (json.name);


str.parseJSON()、この内部の parseJSON は str を指します。現時点では、すべてのブラウザが正常に解析できるわけではありません。
IE8/Firefox/Safari/Opera では引き続き「ジャック」が表示されますが、Chrome では「不正アクセスが捕捉されませんでした」というエラーが報告されます。
このように書いた場合、なぜ Chrome はそれをサポートしないのですか? 2 つのメソッドを比較すると、JSON.parse に渡されるパラメータの 1 つは文字列 str で、もう 1 つは this です。両者に違いはないように思えますが?
str.parseJSON() の場合、parseJSON 内の this は str を指す必要があります。 parseJSON メソッドを変更します:



コードをコピーします コードは次のとおりです: Object.prototype。 parseJSON = function () {
alert(typeof this);
return JSON.parse(this);


再実行すると、parseJSON がポップすることがわかります。上のオブジェクト、おそらくこれが違いです。文字列を直接 new することで明らかな効果を確認できます



コードをコピーします
コードは次のとおりです: var js = JSON.parse(new String('{"name":"jack"}')); alert(js.name);

Chrome を除く上記のコードエラーが発生しても、他のブラウザは正常に動作します。
基本的に結論は次のとおりです。
Chrome では、JSON.parse の最初のパラメータはオブジェクトではなく文字列のみにすることができます (新しい String メソッドはサポートされていないことを含みます)
上記に戻って、 give Object.prototype は、json を解析するためのメソッドを追加します。すべてのブラウザーと互換性を持たせたい場合は、次のように記述できます。 >
コードは次のとおりです。


Object.prototype.parseJSON = function () {
return JSON.parse(this.toString())
>var str = '{"name":"jack "}'; var json = str.parseJSON() alert(json.name); -09: このバグは Chrome 6 で修正されました。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。