C’è un modo per usare un tipo numerico come un object chiave?

Sembra che quando uso un tipo numerico come nome di una chiave in un object, esso venga sempre convertito in una stringa. Esiste comunque la possibilità di archiviarlo come numerico? Il normale typecasting non sembra funzionare.

Esempio:

var userId = 1; console.log( typeof userId ); // number myObject[userId] = 'a value'; console.dir(myObject); 

Uscita Dir:

 { '1': 'a value' } 

Quello che voglio è questo:

 { 1: 'a value' } 

Consigli?

Grazie

No, non è ansible. La chiave sarà sempre convertita in una stringa. Vedere i documenti di Property Accessor

I nomi delle proprietà devono essere stringhe. Ciò significa che gli oggetti non stringa non possono essere utilizzati come chiavi nell’object. Qualsiasi object non stringa, incluso un numero, viene convertito in una stringa tramite il metodo toString.

 > var foo = {} undefined > foo[23213] = 'swag' 'swag' > foo { '23213': 'swag' } > typeof(Object.keys(foo)[0]) 'string' 

In un object, no, ma ho trovato la mappa estremamente utile per questa applicazione. Qui è dove l’ho usato per le chiavi numeriche, un evento basato sulla chiave.

 onKeydown(e) { const { toggleSidebar, next, previous } = this.props; const keyMapping = new Map([ [ 83, toggleSidebar ], // user presses the s button [ 37, next ], // user presses the right arrow [ 39, previous ] // user presses the left arrow ]); if (keyMapping.has(e.which)) { e.preventDefault(); keyMapping.get(e.which)(); } } 

Sembra essere di progettazione in ECMA-262-5:

Il tipo di identificatore di proprietà viene utilizzato per associare un nome di proprietà a un descrittore di proprietà. I valori del tipo di identificatore di proprietà sono coppie del modulo (nome, descrittore), dove il nome è una stringa e il descrittore è un valore descrittore di proprietà.

Tuttavia, non vedo una specifica definita per questo in ECMA-262-3. Indipendentemente da ciò, non proverei a usare non-stringhe come nomi di proprietà.

Penso che tu possa fare quanto segue se vuoi usare la cosa sopra per accedervi come un numero, ho fatto lo stesso e ho funzionato.

 var myObj = {"0":"a","1":"b","CNT":2}; $.each(myObj,function(key,value){ if(isNaN(parseInt(key))){ return true; //continue; } //Code to perform operation } 

Funziona solo quando la chiave non inizia e il carattere numerico altrimenti verrà convertito in un numero. Guarda il seguente esempio:

 parseInt("45kjghk") === 45 

Ho usato jQuery qui


aggiornato:

 var myObj = {"0":"a","1":"b","CNT":2}; $.each(myObj,function(key,value){ if(isNaN(parseInt(key)) || (key.length !== parseInt(key).toString().length) ){ return true; //continue; } //Code to perform operation } 

Può superare il problema precedente. Si prega di suggerire meglio se disponibile e il problema con questa risposta se ci sono.

Abbiamo bisogno di qualcosa del genere?

 var userId = 1;var myObject ={}; console.log( typeof userId ); // number myObject[userId] = 'a value'; console.dir(myObject); 

Console: Object

1: “un valore”

In JavaScript, stringhe e numeri numerici sono intercambiabili, quindi

 myObject[1] == myObject['1'] 

Se vuoi veramente che il numero sia la chiave per un object, potresti volere un array (cioè creato con un new Array() o [] ).