[過去ログ] JavaScript の質問用スレッド vol.125 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
607(1): デフォルトの名無しさん (アウアウウー Sac7-OPB1 [106.146.82.82]) [sage] 2023/01/17(火) 01:44:26.39 ID:BTJjkb3Ra(1) AAS
 >>587587(3): デフォルトの名無しさん (ワッチョイ 3f3d-/16g [133.32.132.49 [上級国民]]) [sage] 2023/01/15(日) 15:02:28.33 ID:yvxMece60(1/2) AAS
 よろしくお願いします 
  
 【環境】Win11,Chrome 
 【何をしたのか】下記コードをHTMLファイルにしてchromeで読み込ませて、コンソールで見た 
 JSONのItemsを一個追加して、追加したageだけ書き換えたいが、両方書き換わる 
 【エラーメッセージ】エラーメッセージはない 
 【期待する結果】Itemsの2個めのageだけが40になるはず 
 【サンプルコード】現象を再現可能な最小限のコードを書いてください。 
  
 <script> 
 json =  
 { 
   "color_list": [ "red", "green", "blue" ], 
   "Items": [ 
     { "name": "Tanaka", "age": 26 }, 
   ] 
 } 
 data0=json["Items"][0] 
  
 json["Items"].push(data0) 
  
 console.log("before"); 
 console.log(json["Items"][0]["age"]); 
 console.log(json["Items"][1]["age"]); 
  
 json["Items"][1]["age"]=40 
  
 console.log("after"); 
 console.log(json["Items"][0]["age"]); 
 console.log(json["Items"][1]["age"]); 
 </script> 
結果 
 before 
 26 
 26 
 after 
 40 
 40  
C/C++ 以外の言語は、参照しかコピーしない・shallow copy。 
 実体は再作成されない 
  
 なので、deep copy するのに、参照のリンクが切れないので困る 
  
 だから、marshal とか、わざわざオブジェクトをJSON 文字列化して、 
 その文字列から、新しいオブジェクトを作ったりする 
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.027s