Javascript 是否为对象属性指定数组值?

Javascript 是否为对象属性指定数组值?,javascript,Javascript,我有下面的代码,我想让甲板阵列充满52张不同的卡。每当我运行代码并警告卡对象时,它显示为“[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.l

我有下面的代码,我想让甲板阵列充满52张不同的卡。每当我运行代码并警告卡对象时,它显示为“[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)
    }
}
var suites=[“梅花”、“钻石”、“红心”、“黑桃”];
var等级=[“A”、2、3、4、5、6、7、8、9、10、“J”、“Q”、“K”];
var deck=[];
对于(变量i=0;i<0.length;i++){
对于(var j=0;j
这就是对象的显示方式,它的
toString
方法只输出它,以查看它的内容使用情况

alert(JSON.stringify(card));

将您的警报替换为此-->警报(JSON.stringify(卡))

var suites=[“梅花”、“钻石”、“红心”、“黑桃”];
var等级=[“A”、2、3、4、5、6、7、8、9、10、“J”、“Q”、“K”];
var deck=[];
对于(变量i=0;i<0.length;i++){
对于(var j=0;j


JSON.stringify将JavaScript数据结构转换为JSON文本。JSON文本只不过是文本的键:值对。它无法变得更简单。

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

您应该将警报更改为:

alert(JSON.stringify(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());
    }
}
var suites=[“梅花”、“钻石”、“红心”、“黑桃”];
var等级=[“A”、2、3、4、5、6、7、8、9、10、“J”、“Q”、“K”];
var deck=[];
对于(变量i=0;i<0.length;i++){
对于(var j=0;j
注意


您应该考虑使用<代码>控制台。()(代码)>而不是<代码>警报()/<代码>,因为在控制台(HIT F12)中调试更不麻烦和更容易。但是要小心运行IE9或更低版本的生产代码,因为当开发人员控制台未打开时,他们的javascript引擎将崩溃。

您可以提醒
card.rank
card.suit
但不要
card
。可能的副本或免责声明:JSON.stringify非常适合在新浏览器上进行调试。然而,令人失望的是,许多公开使用的浏览器不支持它,所以请确保有回退,或者删除生产代码的日志记录。我可以使用
alert(card)
(显式
alert(card.toString())
)或
console.log(card)
,而不是它们的混合:-),这就是我评论
alert()的原因
在示例中调用。;)感谢您的帮助,我得到了一个很好的解决方案,但是与console.log()和alert()混淆了,它们现在都可以工作了。
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());
    }
}