JavaScript无法向Cardlist添加对象且无报错,请求技术排查
问题分析与解决
你的代码没报错也没生成Card实例,核心原因是循环条件写错了,直接拿数组和数字做比较,JavaScript的类型转换导致循环根本没执行。
具体问题点
- 外层循环条件
i < letterlist:letterlist是数组,JS会把它转为字符串"Ace,Hearts",再转数字得到NaN。0 < NaN的结果是false,所以外层循环直接跳过,Cardlist里没有添加任何实例。 - 内层循环同理,
x < valuelist也会得到false,同样不会执行。 - 最后遍历
Cardlist的循环i < Cardlist,空数组转数字也是NaN,循环同样不执行,所以终端既没输出也没报错。
修正后的代码
class Card{ constructor(letter, value) { this.letter = letter; this.value = value; } type() { return this.letter + " of " + this.value; } } const letterlist = ['Ace', 'Hearts']; const valuelist = [1, 2, 3, 4, 5]; const Cardlist = []; // 循环条件改为数组的length属性 for (let i = 0; i < letterlist.length; i++){ for (let x = 0; x < valuelist.length; x++){ Cardlist.push(new Card(letterlist[i], valuelist[x])); } } // 同样改为length属性,也可以用forEach简化 for (let i = 0; i < Cardlist.length; i++){ console.log(Cardlist[i]); // 如果想输出卡片的描述文本,可以用type方法: // console.log(Cardlist[i].type()); }
额外提示
如果觉得for循环麻烦,也可以用forEach遍历数组,代码更简洁:
letterlist.forEach(letter => { valuelist.forEach(value => { Cardlist.push(new Card(letter, value)); }); }); Cardlist.forEach(card => console.log(card));
内容的提问来源于stack exchange,提问作者Jane Smith
相关产品推荐
相关产品推荐

