2018-1-2
{}とnew Object、[]とnew Array
JavaScript において、以下のコードは同じ意味である。
var hoge = {};
var hoge = new Object();
var hoge = [];
var hoge = new Array();
{}と[]は、それぞれnew Objectとnew Arrayのシンタックスシュガーである。
なんでこういうことを今更書いたかというと、{}と[]による代入は、変数の参照先を変えるということを見落としていたからである。
var hoge = {
a: 0,
b: 1,
};
var fuga = function(obj) {
obj = {};
}
fuga(hoge);
console.log(hoge); // => { a: 0, b: 1 }
上のコードの通り、{}と[]による代入は変数の参照先を変更するため、関数の引数に対して行っても元の変数に影響を与えない。
なんとなく漠然と{}と[]によって代入を行うと、同じメモリアドレスを参照している変数全てが空になるイメージがあったので注意したい。