Javascript 是否为对象属性指定数组值?
我有下面的代码,我想让甲板阵列充满52张不同的卡。每当我运行代码并警告卡对象时,它显示为“[object]” 有人能给我解释一下为什么它会这样做,以及这个问题的解决方案吗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
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());
}
}