javascriptを使っていくと、JSONでデータを構築しておいて、使い回して、値を少しずつ変更していく・・・ような
事って結構便利にできるんだが、コピーするのがオブジェクトの場合、コピー後にとんでもないトラブルになるケースがある。
それは、コピー後に、オブジェクト内のデータを修正しようもんなら、元のオブジェクトのデータが修正されてしまって、
さらにそれを別の箇所にコピーしていようものなら、結果がとんでもない事になることが想像できると思う。
var a = {test1:1,test2:2,test3:3,test4:{aa:"a",bb:"b"}};
var b = a;
b.test1 = 100;
結果:a = {test1:100,test2:2,test3:3,test4:{aa:"a",bb:"b"}}
これは、javascriptがprototypeっちゅうめんどくさい中核で構成されているため、というとわけわからなくなるんだけど、スピードと効率を考えて、変数は出来る限り参照する形をとっている為だと思われる。
解決法としては、全てのデータをパースして、オブジェクトではなく、変数状態でコピーを行うようにする関数を作ってもいいし、jQueryのextend関数を使うという手もある。
でも、もっとも簡単に解決出来る方法を見つけた!!
var b = JSON.parse(JSON.stringify(a));
とするだけなのだ!!!
これ簡単、便利、関数にしなくてもいいぐらい楽!!
デメリットとしては、旧ブラウザバージョンでどのくらい動くかは不明。
とにかくchromeでは正常に動いた。
あと、オブジェクトの内部にfunctionが存在する場合に正常にparseでfunctionが動作するか不明。※だれか試してくれ。
ちなみに、書いてあったサイトは
ココです
0 件のコメント:
コメントを投稿