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]