Compilando outras respostas:
Objeto
var test = {};
Ao usar um número como a chave de uma nova propriedade, o número se transforma em uma string:
test[2300] = 'Some string';
console.log(test['2300']);
// Output: 'Some string'
Ao acessar o valor da propriedade usando o mesmo número, o número é transformado em string novamente:
console.log(test[2300]);
// Output: 'Some string'
Ao obter as chaves do objeto, no entanto, elas não serão transformadas em números:
for (var key in test) {
console.log(typeof key);
}
// Output: 'string'
Mapa
ECMAScript 6 permite o uso do objeto Map ( documentação , uma comparação com Object ). Se seu código deve ser interpretado localmente ou se a tabela de compatibilidade ECMAScript 6 parece verde o suficiente para seus objetivos, considere o uso de um mapa:
var test = new Map();
test.set(2300, 'Some string');
console.log(test.get(2300));
// Output: 'Some string'
Nenhuma conversão de tipo é realizada, para o melhor ou para o pior:
console.log(test.get('2300'));
// Output: undefined
test.set('2300', 'Very different string');
console.log(test.get(2300));
// Output: 'Some string'