簡體   English   中英

我如何誤用|| 這段代碼中的邏輯運算符?

[英]How am I mis-using the || logical operator in this piece of code?

var user = prompt("Prose prose prose. Do you SCREAM, TURN AROUND, or RUN").toUpperCase();

switch (user) {
    case 'SCREAM':
        var choice1 = prompt("Prose prose prose. Do you TURN AROUND, PASS OUT, or USE MAGIC").toUpperCase();
            if (choice1 === "TURN AROUND" || "TURN") {
                console.log("Prose prose prose!")

            } else if (choice1 === "PASS_OUT" || "PASS" || "FAINT" || "FEINT") {
                console.log("Prose prose prose.")

            } else if (choice1 === "USE_MAGIC" || "MAGIC" || "SPELL" || "WIZARDRY") {
                console.log("Prose prose prose.")

            } else if (choice1 === "4" && "2" || "42") {
                console.log("Congratulations, You have chosen the secret option! You win!")
            } else {
                console.log("I'm sorry, I didn't understand that. Try again!")
            }
        break;

 //imagine default state and rest of code are here

所以這只是我正在研究的一個非常基本的代碼片段。 我遇到的問題是,每當我選擇任何“ PASS OUT ”或“ USE MAGIC ”選項時,選項自動默認為“ TURN AROUND ”選項。 現在我發現如果我只有兩個邏輯運算符用於else if語句,問題就會消失。 但是從我在互聯網上閱讀的內容來看,我可以在邏輯運算符之間放置多少內容。 我究竟做錯了什么?

您正在尋找:

if (choice1 === "TURN AROUND" || choice1 === "TURN") {

...等等。 例如,您必須在||每一側進行比較 運營商。 請參閱下文了解原因。

但在這種情況下,我可能會使用另一個switch (可能在一個單獨的函數中,以防止事情變得太復雜),或者可能使用查找表。


您的原始表達式的評估方式如下:

if ((choice1 === "TURN AROUND") || "TURN") {

...對於choice1 = "FOO" (例如)變為:

if (false || "TURN") {

...因為choice1不是"TURN AROUND" 然后變成:

if ("TURN") {

...因為奇怪的強大|| 操作員工作。 因為這很簡單,即使choice1與其他選項都不匹配,你也會分支到if塊。

這里的問題是,|| 運算符測試左邊的語句是否為真,或者右邊的語句是否為真。 因此,如果是第一個if語句,它會測試choice1 ===“TURN AROUND”是否為真或者如果“TURN”為真。 因為你只是檢查一個字符串,它總是如此。

你要做的就是,要經常檢查選擇1,如下所示:

if(choice1 === "TURN AROUND" || choice1 === "TURN"){
    console.log("Prose prose prose!");
} else if (choice1 === "PASS OUT" || choice1 === "PASS" || choice1 === "FAINT" || choice1 === "FEINT"){
    console.log("Prose prose prose.");
}  // and so on
[...]

您可以使用adeneo的建議來簡化您的代碼:

if(["TURN AROUND", "TURN"].indexOf(choice1) !== -1){
    console.log("Prose prose prose!");
} else if(["PASS OUT", "PASS", "FAINT", "FEINT"].indexOf(choice1) !== -1){
    console.log("Prose prose prose.");
} // and so on

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM