给对象属性一个数组值?

时间:2013-07-16 19:05:27

标签: javascript

我有以下代码,我想让甲板阵列装满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)
    }
}

5 个答案:

答案 0 :(得分: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(),因为它在控制台中调试更加烦人且更容易(点击F12)。但是要小心运行IE9或更低版本的生产代码,因为当开发者控制台没有打开时,他们的javascript引擎会崩溃。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

alert(JSON.stringify(card));

答案 3 :(得分:0)

FIDDLE DEMO

使用此 - &gt;提醒(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文本只是关键:文本的值对。它不能变得更简单。

答案 4 :(得分:0)

您应该将警报更改为:

alert(JSON.stringify(card))