JavaScript のオブジェクトは参照渡しで代入される
参考
http://monopocket.jp/blog/javascript/2130/
数値や文字列は代入時に値渡されるため、代入先の値が変更されても代入元の値は変更されない。
var value1 = 1; var value2 = value1; // value2 を変更する value2 = 2; console.log(value1); // 出力: 1 (中身は変更されない) console.log(value2); // 出力: 2
オブジェクト(配列も含む)の場合には、代入時に参照渡しされるため、
代入先のオブジェクトが変更されると、オリジナルのオブジェクトも変更されてしまう。
var object1 = {a: true, b: false}; var object2 = object1; // object2 を変更する object2.c = true; console.log(object2); // 出力: {a: true, b: false, c: true} (中身が変更された) console.log(object1); // 出力: {a: true, b: false, c: true}
これ基本らしいけども、、、そうなの????
オブジェクトのコピー – JavaScript
var object1 = {a: true, b: false}; var object2 = $.extend(true, {}, object1); // object2 を変更する object2.c = true; console.log(object1); // 出力: {a: true, b: false} (中身は変更されない) console.log(object2); // 出力: {a: true, b: false, c: true}
配列のコピー – JavaScript
var array1 = [1 , 2, 3]; var array2 = $.extend(true, [], array1); // array2 を変更する array2.push(4); console.log(array1); // 出力: [1, 2, 3] (中身は変更されない) console.log(array2); // 出力: [1, 2, 3, 4]