6

I have the following code and I want to make the deck array full of 52 different cards. Whenever I run the code and the card object is alerted it displays as '[object Object]'.

Can someone explain to me why it does this and a solution for this problem?

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)
    }
}
4

5 回答 5

6

为什么这样做

这是完全正常的。您创建的 card 对象在您执行时不知道如何表示自己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()因为它不那么烦人并且更容易在控制台中调试(按 F12)。但是要小心运行 IE9 或更低版本的生产代码,因为当开发者控制台未打开时,它们的 javascript 引擎会崩溃。

于 2013-07-16T19:11:50.897 回答
2

发生这种情况是因为您指定要警报的整个对象,而警报不知道哪些属性是相关的。如果您想要对象的可扩展视图,您可以使用console.log(card),这会将您的对象作为树视图输出到浏览器开发者控制台中。

于 2013-07-16T19:07:14.367 回答
0

这就是一个对象的显示方式,它的toString方法只输出那个,看看它的内容使用

alert(JSON.stringify(card));
于 2013-07-16T19:06:29.510 回答
0

小提琴演示

用这个替换你的警报-->alert(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))
    }
}

解释

JSON.stringify 将 JavaScript 数据结构转换为 JSON 文本。Json 文本不过是键值对文本。它不能变得更简单。

于 2013-07-16T19:06:59.800 回答
0

您应该将警报更改为:

alert(JSON.stringify(card))
于 2013-07-16T19:07:52.913 回答