2015-06-10 15 views
6

Ho imparato un po 'di javascript di recente e ha scoperto che è possibile memorizzare diversi tipi di dati in un array come questo:In quale situazione sarebbe utile archiviare in un array diversi tipi di dati in Javascript?

var myArray = [12, 23.5, "hello", true]; 

Ho un po' di fondo Java e questo non è possibile in Java come si dovrebbe dichiarare il tipo di dati altrimenti si otterrebbe un errore (int myArray = blah blah blah)

Quindi la mia domanda è, in quali situazioni utilizzereste questo invece di un oggetto per esempio. Gli esempi sarebbero grandiosi. Grazie.

+1

Un esempio sarebbe un array di 'argomenti', come indicato per [' .apply() '] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ funzione/a pagamento). –

+0

È tutto simile a 'ArrayList ' in Java. – Bergi

risposta

4

Questo è il caso in qualsiasi lingua che non sia fortemente tipizzata. I membri dell'array possono essere di primitive diverse e possono anche essere oggetti. Nella maggior parte dei casi non si vorrebbe usare questo perché non c'è una struttura chiara per l'array. Si preferisce avere qualcosa di simile:

var data = { 
    prop: 12, 
    otherProp: 24.5, 
    stringProp: "hello", 
    boolProp: true 
}; 
+0

ottimo punto ci "perché non c'è una struttura chiara per il tuo array". –

+0

Sì, ottimo punto. Invece di avere più tipi di dati in un array, sarebbe probabilmente più appropriato semplicemente strutturarlo come un oggetto semplice. –

+0

Non ho detto che non è possibile farlo in java, stavo solo dicendo che JS, che non è fortemente battuto a macchina e nessun altro linguaggio come questo, ad esempio python, permette questo. –

3

Da quello che so, non esiste in realtà una regola o un insieme di situazioni specifiche in cui sarebbe considerata la migliore pratica per memorizzare valori di diversi tipi tutti nello stesso array in JavaScript. Questo è possibile solo perché JavaScript è tipizzato in modo dinamico. Non penso ci sia alcun altro motivo oltre a quello.

È consigliabile farlo? IMHO, io non la penso così, davvero. Penso che la ragione per cui Java (e ho citato Java perché hai detto che hai un po 'di background) limita i tipi di dati dell'array (come fanno molte lingue) è in parte perché è più pulito e separa i problemi. Penso che limitare le variabili/altri oggetti in JavaScript a un tipo di dati sia di solito una buona idea indipendentemente dalla "capacità" della digitazione dinamica.

Modifica

Jonathan Lonowski ha sottolineato che una buona applicazione è in Function.prototype.apply, che ha un senso. Questo perché puoi trasmettere una serie di dati, ognuno dei quali può avere tipi diversi. Questa è una buona situazione in cui avrebbe senso che JavaScript avrebbe digitazione dinamica in oggetti come matrici, ecc.

+1

... e ovunque altro quando si usa "Array" per le tuple. – Bergi

+0

@Berg, si, abbastanza giusto. Non ho visto molti casi di utilizzo di produzione in cui le tuple contenenti diversi tipi di dati sono un punto focale, a meno che non si stia lavorando con lo sviluppo dell'algoritmo o qualcosa del genere (node.js, forse). –

+0

Le linee CSV sono un buon esempio giorno per giorno. E [chiave, valore] -le tuple vengono utilizzate in tutto l'ES6. – Bergi

2

In realtà, è posible in Java, si deve dichiarare:

Object[] prove = {1, "hi"}; 

in JavaScript è lo stesso, un array di oggetti.

3

Sebbene sia possibile memorizzare diversi tipi di dati in serie, si ritiene uno stile di programmazione poveri, perché una matrice per definizione omogenea struttura dati.

Come si potrebbe trattare in modo uniforme tale varietà:

[ 2.5 , [ 1, 2 ], ["a", "b", "c"], {min: 2, max: 5} ] 

per

  • classificare
  • serializzazione
  • utilizzo della memoria
  • algoritmi cioèper il valore massimo

Non sembra naturale avere diversi tipi di array, vero?

Problemi correlati