Compilando otras respuestas:
Objeto
var test = {};
Cuando se usa un número como clave de una nueva propiedad, el número se convierte en una cadena:
test[2300] = 'Some string';
console.log(test['2300']);
// Output: 'Some string'
Al acceder al valor de la propiedad con el mismo número, el número se convierte nuevamente en una cadena:
console.log(test[2300]);
// Output: 'Some string'
Sin embargo, al obtener las claves del objeto, no se volverán a convertir en números:
for (var key in test) {
console.log(typeof key);
}
// Output: 'string'
Mapa
ECMAScript 6 permite el uso del objeto Map ( documentación , una comparación con Object ). Si su código está destinado a ser interpretado localmente o la tabla de compatibilidad de ECMAScript 6 parece lo suficientemente verde para sus propósitos, considere usar un mapa:
var test = new Map();
test.set(2300, 'Some string');
console.log(test.get(2300));
// Output: 'Some string'
No se realiza ninguna conversión de tipo, para bien o para mal:
console.log(test.get('2300'));
// Output: undefined
test.set('2300', 'Very different string');
console.log(test.get(2300));
// Output: 'Some string'