2016-05-30 8 views
9

Quando eseguo seguente codicePerchè Object.keys è rendimenti array di stringhe, invece di array di numeri

var obj = { 0: 'a', 1: 'b', 2: 'c' }; 
typeof Object.keys(obj)[0] //returns string 

In obj oggetto Sto creando tasti numerici.

Qualsiasi motivo, perché la sua stringa e non un number?

+2

Non si può avere i tasti numerici per le proprietà degli oggetti. Le proprietà degli oggetti sono sempre stringhe. –

+0

se hai bisogno di numeri come chiavi usa 'Map' ES2015 – rand

+0

Ma possiamo anche fare' obj [0] ', dove' 0' è numero, Voglio solo sapere qualche motivo particolare che hanno trattato in questo modo – JagsSparrow

risposta

4

Perché Object.keys restituisce un array con stringhe

Object.keys() restituisce un array i cui elementi sono stringhe corrispondenti al enumerabile proprietà trovate direttamente sull'oggetto. L'ordinamento delle proprietà è uguale a quello dato dal looping sulle proprietà dell'oggetto manualmente.

Si ottiene una matrice di stringhe, perché Property names sono stringhe per definizione.

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

+0

@pvg, mentre * 'toString' non è un cast, restituisce una rappresentazione stringa di qualsiasi oggetto Comprese le stringhe. * È vero, mdn dichiarato sopra. –

+1

Ah ora ha più senso come citazione. E 'ancora, nonostante la provenienza MDN, completamente sbagliato, è una conversione, non un cast anche senza il fastidioso reclamo che' typecasted 'non è grammaticalmente corretto inglese. – pvg

2

Come per la documentazione Object.keys() rendimenti stringa del campo

Object.keys() restituisce una matrice i cui elementi sono stringhe corrispondente alle proprietà enumerabili trovato direttamente al momento oggetto. L'ordinamento delle proprietà è la stessa di quella in loop sulle proprietà dell'oggetto manualmente. (Taken from here)

Se si desidera convertirlo in numero di matrice quindi utilizzare map()

var obj = { 
 
    0: 'a', 
 
    1: 'b', 
 
    2: 'c' 
 
}; 
 
console.log(typeof Object.keys(obj).map(Number)[0])

10

Le chiavi sono sempre di un tipo di stringa. Se avete bisogno di numeri si dovrà lanciare manualmente:

var obj = { 0: 'a', 1: 'b', 2: 'c' }; 
 
var ids = Object.keys(obj).map(Number); 
 

 
console.log(ids);

2

Javascript L'oggetto non ha tasti numerici! Tutte le chiavi sono stringhe. Sempre.

Se si desidera mappare altre cose ai valori, è necessario utilizzare uno Map.

0

var obj = { 
 
    0: 'a', 
 
    1: 'b', 
 
    2: 'c' 
 
}; 
 
console.log(typeof Object.keys(obj).map(Number)[0])

+1

Dovresti dare una spiegazione nella tua risposta invece di pubblicare semplicemente il codice sorgente –

Problemi correlati