簡體   English   中英

在JavaScript中檢查字符串是否相等

[英]Checking string equality in javascript

我正在處理一個從html接收字符串並檢查該字符串是否等於另一個字符串的腳本。

我有些刺痛。 我收到從a到f的成績,有些成績被認可,有些成績沒有。 問題出在DE和F。==運算符可能出問題了嗎? 注意:我試圖在第二個if語句之前警告成績,並確保我收到一個字符串值,所以以下代碼中出現了問題。 碼:

if (course1_grade) {
    if (course1_grade == "A") {
        course1_point = 4.0 * course1_credit;
    } else if (course1_grade == "A-") {
        course1_point = 3.67 * course1_credit;
    } else if (course1_grade == "B+") {
        course1_point = 3.33 * course1_credit;
    } else if (course1_grade == "B") {
        course1_point = 3.0 * course1_credit;
    } else if (course1_grade == "B-") {
        course1_point = 2.67 * course1_credit;
    } else if (course1_grade == "C+") {
        course1_point = 2.33 * course1_credit;
    } else if (course1_grade == "C") {
        course1_point = 2.0 * course1_credit;
    } else if ($course1_grade == "C-") {
        course1_point = 1.67 * course1_credit;
    } else if (course1_grade == "D+") {
        course1_point = 1.33 * course1_credit;
    } else if (course1_grade == "D") {
        course1_point = 1.0 * course1_credit;
    } else if (course1_grade == "F") {
        course1_point = 0.0 * course1_credit;
    }
} else {
    course1_point = 0.0;
}

由於未聲明變量$course1_grade ,因此您的代碼在嘗試檢查C-級時$course1_grade 此后沒有任何代碼運行。

您可以通過刪除該美元符號來修復代碼,也可以使用查找,這將更加緊湊:

var gradeLookup = {
    "A" : 4,
    "A-": 3.67,
    "B+": 3.33,
    "B" : 3,
    "B-": 2.67,
    "C+": 2.33,
    "C" : 2,
    "C-": 1.67,
    "D+": 1.33,
    "D" : 1
};

course1_grade = (course1_grade || "").trim().toUpperCase();
course1_point = (gradeLookup[course1_grade] || 0) * course1_credit;

您可以使用的另一種方法是switch語句:

function getFactor(grade) {
    switch ((grade || "").trim().toUpperCase()) {
        case "A" : return 4.0;
        case "A-": return 3.67;
        case "B+": return 3.33;
        case "B" : return 3;
        case "B-": return 2.67;
        case "C+": return 2.33;
        case "C" : return 2;
        case "C-": return 1.67;
        case "D+": return 1.33;
        case "D" : return 1;
        default  : return 0;
    }
}

course1_point = getFactor(course1_grade) * course1_credit;

JLRishe發現了錯誤,請參見他/她的答案,這是正確的答案。 因此,這現在是帶有代碼的注釋(因此使其成為CW)。

對於它的價值,我將使用查找映射表或switch ,而不是漫長的if/else系列。

地圖:

var factor = {
  "A":  4.0,
  "A-": 3.67,
  "B+": 3.33,
  "B":  3.0,
  "B-": 2.67,
  "C+": 2.33,
  "C":  2.0,
  "C-": 1.67,
  "D+": 1.33,
  "D":  1.0,
  "F":  0.0
};
course1_point = (factor[course1_grade.trim().toUpperCase()] || 0.0) * course1_credit;

 var factor = { "A": 4.0, "A-": 3.67, "B+": 3.33, "B": 3.0, "B-": 2.67, "C+": 2.33, "C": 2.0, "C-": 1.67, "D+": 1.33, "D": 1.0, "F": 0.0 }; var course1_credit = 100; function test(course1_grade) { var course1_point = (factor[course1_grade.trim().toUpperCase()] || 0.0) * course1_credit; snippet.log("grade = " + course1_grade + ", points = " + course1_point); } test("a"); test("a-"); test("b+"); test("b"); test("b-"); test("c+"); test("C"); test("C-"); test("D+"); test("D"); test("F"); 
 <!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script> 

switch

switch (course1_grade.trim().toUpperCase()) {
  case "A":
    course1_point = 4.0 * course1_credit;
    break;
  case "A-":
    course1_point = 3.67 * course1_credit;
    break;
  case "B+":
    course1_point = 3.33 * course1_credit;
    break;
  case "B":
    course1_point = 3.0 * course1_credit;
    break;
  case "B-":
    course1_point = 2.67 * course1_credit;
    break;
  case "C+":
    course1_point = 2.33 * course1_credit;
    break;
  case "C":
    course1_point = 2.0 * course1_credit;
    break;
  case "C-":
    course1_point = 1.67 * course1_credit;
    break;
  case "D+":
    course1_point = 1.33 * course1_credit;
    break;
  case "D":
    course1_point = 1.0 * course1_credit;
    break;
  case "F":
    course1_point = 0.0 * course1_credit;
    break;
  default:
    course1_point = 0.0;
}

 var course1_credit = 100; function test(course1_grade) { var course1_point; switch (course1_grade.trim().toUpperCase()) { case "A": course1_point = 4.0 * course1_credit; break; case "A-": course1_point = 3.67 * course1_credit; break; case "B+": course1_point = 3.33 * course1_credit; break; case "B": course1_point = 3.0 * course1_credit; break; case "B-": course1_point = 2.67 * course1_credit; break; case "C+": course1_point = 2.33 * course1_credit; break; case "C": course1_point = 2.0 * course1_credit; break; case "C-": course1_point = 1.67 * course1_credit; break; case "D+": course1_point = 1.33 * course1_credit; break; case "D": course1_point = 1.0 * course1_credit; break; case "F": course1_point = 0.0 * course1_credit; break; default: course1_point = 0.0; } snippet.log("grade = " + course1_grade + ", points = " + course1_point); } test("a"); test("a-"); test("b+"); test("b"); test("b-"); test("c+"); test("C"); test("C-"); test("D+"); test("D"); test("F"); 
 <!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script> 

暫無
暫無

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

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