2008-10-22
json.jsとjson2.jsの違い
JavaScriptのとあるコードの修正において、JSONの受け渡しでevalの使用をやめようとした*1ときに調べたメモ。
JSON in JavaScript http://www.json.org/js.html http://www.json.org/json2.js
これがメジャーなライブラリのようです。
ふとファイル名の「2」に疑問を持って「json.js」に変えてみたら、そちらも落とせました。で、最初にjson.jsを使ってみたら思うように動きませんでした。json2.jsに変更してみたところ、正常に動きました。
json2.jsには無くて、json.jsのみに存在するのが以下のコード。これが原因だったようです。
if (!Object.prototype.toJSONString) { Object.prototype.toJSONString = function (filter) { return JSON.stringify(this, filter); }; Object.prototype.parseJSON = function (filter) { return JSON.parse(this, filter); }; }
調べていた中で見つけたmalaさんの記事で理解することができました。
まず、Object.prototypeにメソッドを生やしてしまうとfor inでキーを列挙するときにいちいちhasOwnPropertyを使わないといけなくなるので普通は使いません。影響が大きすぎるので、よっぽど変態的なライブラリじゃないと使わない。
最速インターフェース研究会 :: JavaScriptにおけるdeep clone
実際にfor inを使っていて、そこで追加されたメソッドの分も回ってしまっていたために動きがおかしくなっていました。
json.jsの中をもう一度詳しく見てみると以下のようなコメントが。
52行目
This file will break programs with improper for..in loops. See
http://yuiblog.com/blog/2006/09/26/for-in-intrigue/
523行目
// Augment the basic prototypes if they have not already been augmented. // These forms are obsolete. It is recommended that JSON.stringify and // JSON.parse be used instead.
「プログラムがおかしくなるかも」とか、「このやり方は時代遅れだ」とか書かれているようです。
というわけで、現状json.jsへのリンクは生きているみたいですけど、よほどのことがない限りは通常のリンク通りにjson2.jsを使うようにしたほうが良さそうです。
*1:好ましくないとされているため
トラックバック - http://d.hatena.ne.jp/deeeki/20081022/jsonjs
リンク元
- 159 http://www.google.co.jp/url?sa=t&rct=j&q=json2.js&source=web&cd=3&sqi=2&ved=0CCwQFjAC&url=http://d.hatena.ne.jp/deeeki/20081022/jsonjs&ei=gRCkTsL2G8agmQWPh92fCQ&usg=AFQjCNEUBxRKY9Co93Me_x9Ie-mGkUeAOw&sig2=zzYcXRynw54lFUqsmnMf0A
- 146 http://www.google.co.jp/search?q=json2.js&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 131 http://www.google.co.jp/search?q=json2.js&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 117 http://www.google.co.jp/search?q=json.js&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a
- 98 http://www.google.co.jp/search?q=json.js&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox
- 73 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=ORG&q=json.js&btnG=検索&lr=lang_ja
- 69 http://www.google.co.jp/url?sa=t&rct=j&q=json.js&source=web&cd=3&ved=0CDYQFjAC&url=http://d.hatena.ne.jp/deeeki/20081022/jsonjs&ei=lTCETq2wMsjxmAXp8K3wDw&usg=AFQjCNEUBxRKY9Co93Me_x9Ie-mGkUeAOw&sig2=LJFNWEfYbYfSZJgZy0BZ6Q
- 67 http://b.hatena.ne.jp/entry/d.hatena.ne.jp/deeeki/20081022/jsonjs
- 67 http://www.google.co.jp/search?aq=f&sourceid=chrome&ie=UTF-8&q=json.js
- 64 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=json2.js



