Object.create(null)

任意の入力文字列に対して値を管理したいとき, Object.create(null) が使える.

var obj = Object.create(null);
console.log(obj["toString"]); // => undefined

こうすると Object.prototype に存在するプロパティ/メソッドを継承しない真に空のオブジェクトが作成できるので, 例えばうっかり "toString" などが入力されても問題ない.

ところで ES6 には Map がある *1 からそれを使えよ, と思われるかもしれないけれど, 複製がコストになる場合や, あるいは上書きされない限り複製元を参照したい場合に, プロトタイプ継承を利用できる.

var parent = Object.create(null);
parent["foo"] = 1;
var child = Object.create(parent);
console.log(child["foo"]); // => 1
parent["foo"] = 2;
console.log(child["foo"]); // => 2
child["foo"] = 3;
console.log(parent["foo"]); // => 2
console.log(child["foo"]);  // => 3

もっとも, これが有効に使える場面はそんなに多くはない気はするけれど……