我正在撰寫一個簡單的基于控制臺的石頭剪刀布游戲作為練習。但是,以下條件始終評估為真。
if (playerselection === computerselection) {
console.log('Draw!');
我已經介紹了幾個 console.log 命令以及斷點來確定是否存在范圍問題或引數更改;情況似乎并非如此。playerelection 可以是“Rock”,而computerselection 可以是“Scissors”(在除錯程序中都經過驗證),但條件被視為真,控制臺輸出“Draw!”。整個代碼如下所示:
array = ['Rock', 'Paper', 'Scissors'];
computerPlay();
userPlay();
evaluation();
function computerPlay() {
computerselection = array[Math.floor(Math.random() * array.length)];
}
function userPlay() {
playerselection = prompt('Choose: Rock, Paper or Scissors', 'Choose it! NOW!!');
}
function evaluation(playerselection, computerselection) {
if (playerselection === computerselection) {
console.log('Draw!');
} else if (
(playerselection == "rock" && computerselection == "scissors") || //All possible victories
(playerselection == "paper" && computerselection == "rock") ||
(playerselection == "scissors" && computerselection == "paper")) {
console.log("You win!");
} else {
console.log("You lose)");
}
}
是什么導致第一個 if 條件每次都評估為真,即使 console.log(playerselection ===computerselection) 在除錯期間評估為假?
uj5u.com熱心網友回復:
一些提示。
在
function evaluation(playerselection, computerselection) {
您有兩個(語言環境)變數的宣告,并使用它們進行比較。
稍后,您呼叫該函式
evaluation()
沒有一些引數,Javascript 采用默認值undefined,就像所有其他沒有值的宣告變數一樣。
這里的代碼有一些變化:
- 預先宣告任何變數,
- 回傳輸入陣列的值,
- 直接在 中使用這兩個值
evaluation, - 提前退出以防止嵌套
if...else結構, - 防止使用不必要的括號,如果有疑問,請查看運算子優先級。
function computerPlay() {
return array[Math.floor(Math.random() * array.length)];
}
function userPlay() {
return prompt('Choose: rock, paper or scissors');
}
function evaluation(playerselection, computerselection) {
if (playerselection === computerselection) {
console.log('Draw!');
return;
}
if (
playerselection === "rock" && computerselection === "scissors" ||
playerselection === "paper" && computerselection === "rock" ||
playerselection === "scissors" && computerselection === "paper"
) {
console.log("You win!");
return;
}
console.log("You lose");
}
const
array = ['Rock', 'Paper', 'Scissors'];
evaluation(userPlay(), computerPlay());
uj5u.com熱心網友回復:
這里兩個變數都不在全域范圍內,因此在 evaluate() 函式中不可訪問。這就是原因,因為兩者都undefined在 evaluate() 內部并且每次都滿足 if 條件。
嘗試在全域范圍內定義兩個變數,如下所示,并從 evaluate() 函式宣告中洗掉引數。
let computerselection = "";
let playerselection = "";
function evaluation() {
//code stuff
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/429404.html
標籤:javascript if 语句
