{}とnew Object、[]とnew Array

JavaScriptにおいて、以下のコードは同じ意味である。

var hoge = {};
var hoge = new Object();
var hoge = [];
var hoge = new Array();

{}[]は、それぞれnew Objectnew Arrayのシンタックスシュガーである。

なんでこういうことを今更書いたかというと、{}[]による代入は、変数の参照先を変えるということを見落としていたからである。

var hoge = {
  a: 0,
  b: 1,
};

var fuga = function(obj) {
  obj = {};
}

fuga(hoge);

console.log(hoge); // => { a: 0, b: 1 }

上のコードの通り、{}[]による代入は変数の参照先を変更するため、関数の引数に対して行っても元の変数に影響を与えない。

なんとなく漠然と{}[]によって代入を行うと、同じメモリアドレスを参照している変数全てが空になるイメージがあったので注意したい。