了解JS编译问题



我正在玩一个快速21点游戏,学习javascript的一些基础知识,我不明白为什么我的代码不能正常工作。很明显,我不了解JavaScript 的基本原理

const types = [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"J",
"Q",
"K",
"A"
];
const suite = ["Hearts", "Spades", "Clubs", "Diamonds"];
const draw = () => Math.floor(Math.random() * 52);
let cards = makeDeck(suite, types);
let score = 0;
//creates the card object
function Card(type, rank) {
this.type = type;
this.rank = rank;
}
//creates an array with every card
function makeDeck(suite, types) {
let cards = [];
let value = 0;
for (let i = 0; i < suite.length; i++) {
for (let j = 0; j < types.length; j++) {
cards.push(new Card(types[j], suite[i]));
}
}
return cards;
}

function determine(Card, score) {
let test = 11;
if (/^d+$/.test(Card.type)) {
test = parseInt(Card.type);
console.log(test);
return test;
} else {
if (Card.type === "J" || "Q" || "K") {
test = 10;
return test;
} else {
if (score > 11) {
test = 2;
return test;
}
}
return test;
}
}
function game() {
let gameDeck = cards;
let card1 = gameDeck[draw()];
let card2 = gameDeck[draw()];
let card3 = gameDeck[draw()];
let card4 = gameDeck[draw()];
let scorePlayer = determine(card1, score) + determine(card2, score);
let scoreDealer = determine(card3, score) + determine(card4, score);
console.log(scoreDealer);
console.log(scorePlayer);
console.log(card1, card2, card3, card4);
}

game();

所以我担心的是确定函数,它似乎没有按照我的意愿工作。我还没有实现一个真正的评分函数,但在这一点上应该不会有太大的不同。我对let和const的用法有什么不正确的地方吗?

if (Card.type === "J" || "Q" || "K") {
test = 10;
return test;
}

无论"Card.type"的值如何,此块始终为true。因为当Card.type不等于"J"时,javascript会检查始终为true的if("Q")。类似地,CCD_ 2也是真的。所有这些都是Javascript中真实的价值观。Javascript有7个错误条件,除此之外,所有其他条件都为true。请在浏览器控制台中尝试此代码段。

if("Q") {
console.log("This statement is true always")
}
  • 请参阅这两个链接以更好地理解JavaScript中的所有虚假值和https://developer.mozilla.org/en-US/docs/Glossary/Falsy

最新更新