2013-07-16 24 views
6

Ho il seguente codice e voglio rendere l'array del mazzo pieno di 52 carte diverse. Ogni volta che eseguo il codice e l'oggetto della carta viene avvisato, viene visualizzato come "[oggetto oggetto]".Assegnare una proprietà dell'oggetto a un valore di matrice?

Qualcuno può spiegarmi perché lo fa e una soluzione per questo problema?

var suits = ["Clubs", "Diamonds", "Hearts", "Spades"]; 
var ranks = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"]; 
var deck = []; 

for (var i = 0; i < suits.length; i++) { 
    for (var j = 0; j < ranks.length; j++) { 
     var card = {rank: ranks[j], suit: suits[i]}; 
     deck.push(card); 
     alert(card) 
    } 
} 
+0

È possibile avvisare 'card.rank' o' card.suit' ma non 'card'. – DevlshOne

+0

possibile duplicato di [come avvisare oggetto javascript] (http://stackoverflow.com/questions/3580754/how-to-alert-javascript-object) o [Stampa contenuto di oggetto JavaScript?] (Http: // stackoverflow. it/questions/1625208/print-content-of-javascript-object) – Bergi

risposta

6

Perché lo fa

Questo è perfettamente normale. L'oggetto della carta che crei non sa come rappresentare se stesso quando fai il tuo alert(), semplicemente perché non ci sono implementazioni del metodo toString().

soluzione per il problema

provare a specificare un'implementazione toString() funzione anonima a ciascun oggetto carta come questa:

var suits = ["Clubs", "Diamonds", "Hearts", "Spades"]; 
var ranks = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"]; 
var deck = []; 

for (var i = 0; i < suits.length; i++) { 
    for (var j = 0; j < ranks.length; j++) { 

     var card = { 
         rank: ranks[j], 
         suit: suits[i], 
         toString : function() { return this.rank + ' ' + this.suit; } 
        }; 

     deck.push(card); 

     //alert(card); // console.log doesn't block code execution 
     console.log(card.toString()); 
    } 
} 

Nota

è consigliabile utilizzare console.log() invece di alert() in quanto è molto meno fastidioso e più facile eseguire il debugging in sole (colpito F12). Ma fai attenzione al codice di produzione che esegue IE9 o inferiore in quanto il loro motore javascript si arresta in modo anomalo quando la console di sviluppo non viene aperta.

+0

Avrei usato 'alert (card)' (esplicitamente 'alert (card.toString())') * o * 'console.log (card) ', non un mix di loro :-) – Bergi

+0

Di sicuro, è per questo che ho commentato la chiamata' alert() 'nell'esempio. ;) –

+0

Grazie per questo, ho ottenuto un ma confuso con il console.log() e alert(), tutto funziona ora. – Tim

0

è così che un oggetto viene mostrato, le sue uscite metodo toString solo che, per visualizzarne il contenuto utilizzano

alert(JSON.stringify(card)); 
+0

Disclaimer: JSON.stringify è ottimo per il debugging quando si ha un browser abbastanza nuovo. Tuttavia, un numero deludente di browser di uso pubblico non lo supporta, quindi assicurati di avere fallbacks o di rimuovere quella registrazione per il codice di produzione. – Katana314

0

FIDDLE DEMO

Sostituire il vostro avviso con questo -> alert (JSON .stringify (carta))

var suits = ["Clubs", "Diamonds", "Hearts", "Spades"]; 
var ranks = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"]; 
var deck = []; 

for (var i = 0; i < suits.length; i++) { 
    for (var j = 0; j < ranks.length; j++) { 
     var card = {rank: ranks[j], suit: suits[i]}; 
     deck.push(card); 
     alert(JSON.stringify(card))//CHANGE THIS... 
     console.log(JSON.stringify(card)) 
    } 
} 

EXPLANATION

JSON.stringify converte le strutture di dati JavaScript in testo JSON. Il testo di JSON non è altro che la chiave: coppia di valori di testo. Non può essere più semplice.

2

Questo accade perché si specifica l'intero oggetto da avvisare e l'avviso non sa quali proprietà sono rilevanti. Se si desidera una vista espandibile dell'oggetto, è possibile utilizzare console.log(card), in questo modo l'oggetto verrà visualizzato come una vista ad albero nella console di sviluppo del browser.

0

Si dovrebbe cambiare il vostro avviso a questo:

alert(JSON.stringify(card)) 
Problemi correlati