数组为JS中的字符串值返回NaN

时间:2019-02-24 00:50:09

标签: javascript arrays nan

我正在编写一个程序,使用西装和卡牌值制作一副纸牌。我正在运行西装的for循环和西装循环内的卡片的另一个嵌套的for循环,并尝试在称为“ deck”的空数组中打印所有组合(52)。在添加值之后尝试记录卡座数组时,在卡座数组中有字符串的值中,我得到“ NaN”。

我知道NaN的意思是“不是数字”,这就是为什么我在打印数组中的字符串值时遇到此错误。

如何打印字符串值?

代码:

let suits = ["Spades", "Hearts", "Diamonds", "Clubs"];
let cards = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];

let deck = [];

for (let i = 0; i < suits.length; i++) {
  for (let j = 0; j < cards.length; j++) {
    deck.push(+cards[j] + "of" + suits[i]);
  }
}
console.log(deck[1]);
for (let k = 0; k < deck.length; k++) {
  console.log(deck[k]);
}

1 个答案:

答案 0 :(得分:2)

deck.push(+cards[j] + "of" + suits[i]);

TO

deck.push(cards[j] + "of" + suits[i]);


unary operator +variable将尝试将值转换为数字,类似于parseInt()Number()。您无法将字符串"Ace"强制转换为数字,因此它将返回"NaN"并将其连接到字符串的开头。

您实际上不需要此一元运算符,因为通过将数字与字符串(+ "of" +)连接,您已经将整数强制为字符串,这是您要在其中实现的数据类型场景。

JS中的强制: JavaScript type coercion explained


并更简洁地使用 ES6 ..

var deck = [].concat(
    ...suits.map(suit =>
       cards.map(card => card +' of '+ suit)
    )
)