2013-07-16 193 views
6

我有下面的代碼,我想使甲板陣列充滿52個不同的卡片。每當我運行代碼並且提醒卡對象時,它顯示爲'[object Object]'。給對象屬性一個數組值?

有人可以向我解釋爲什麼它做到這一點,並解決這個問題?

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

您可以提醒'card.rank'或'card.suit',但不能'card'。 – DevlshOne

+0

[如何提醒JavaScript對象](http://stackoverflow.com/questions/3580754/how-to-alert-javascript-object)或[打印JavaScript對象的內容?](http:// stackoverflow。 com/questions/1625208/print-content-of-javascript-object) – Bergi

回答

6

爲什麼它這樣做

這是完全正常的。您創建的卡片對象不知道如何在執行alert()時表示自己,因爲沒有toString()方法實現。

解決您的問題

嘗試指定一個匿名toString()功能落實到每卡對象是這樣的:

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()); 
    } 
} 

注意

您應該考慮使用console.log()代替alert()因爲它不那麼煩人,而且更容易在con中調試(擊中F12)。但要小心運行IE9或更低版本的生產代碼,因爲當開發者控制檯未打開時,其JavaScript引擎將崩潰。

+0

我要麼使用'alert(card)'(顯式'alert(card.toString())')*或*'console。日誌(卡)',而不是它們的組合:-) – Bergi

+0

當然,這就是爲什麼我在示例中評論了alert()調用。 ;) –

+0

謝謝,我對console.log()和alert()感到困惑,現在都在工作。 – Tim

0

這是一個對象如何表現,其toString方法產出了這一點,以查看其內容使用

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

聲明:當你有一個相當新的瀏覽器時,JSON.stringify非常適合調試。令人失望的公衆使用的瀏覽器不支持它,所以只要確保有後備,或刪除生產代碼的日誌記錄即可。 – Katana314

0

FIDDLE DEMO

這個替換您的警報 - >警報(JSON .stringify(card))

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將JavaScript數據結構轉換爲JSON文本.Json文本不過是關鍵:值對text.It不能變得更簡單。

2

發生這種情況是因爲您指定整個對象進行警報,並且警報不知道哪些屬性是相關的。如果你想要一個可擴展的對象視圖,你可以使用console.log(card),這會將你的對象作爲樹形視圖輸出到瀏覽器開發者控制檯中。

0

你應該快訊改成這樣:

alert(JSON.stringify(card)) 
相關問題