値の列挙

値を列挙する時は(場合にもよるかもしれませんが)Object.freezeを使うといいかもしれません。これを使うとそのオブジェクトの値は(そのままでは)上書きできないようにできます。

また、これはIE9から使えて問題もないです。

使い方

単に引数に上書きを禁止したいオブジェクトを渡すだけです。また戻り値ではただのオブジェクトの用に使うことができます。

Object.freeze({foo: 123})
// {foo: 123}

// `writable`が`false`に
Object.getOwnPropertyDescriptor(Object.freeze({foo: 123}), 'foo')
// {value: 123, writable: false, enumerable: true, configurable: false}

// `Object.freeze`を使わないと`writable`が`true`
Object.getOwnPropertyDescriptor({foo: 123}, 'foo')
// {value: 123, writable: true, enumerable: true, configurable: true}

上書きしようとしてもエラーにはならない

エラーなどは起きませんが、値は元のままです。

const obj = Object.freeze({foo: 123});
obj.foo = 456;
obj.foo // 123

うっかり上書きする・される心配が減ります。