簡體   English   中英

else if語句的奇怪行為(javascript)

[英]Odd behavior with else if statement (javascript)

據我所知,代碼可以正常工作,但是當添加或編輯更多信息時,if else語句開始表現異常。 它正在正確讀取百分比值,但未返回正確的字母字符串。

var total = function (){
    var earned = 0;

     for(i = 0; i < Assignments.length; i++){
         earned += parseInt(Assignments[i].earned);
     }
     var possible = 0;

     for(i = 0; i < Assignments.length; i++){
         possible += parseInt(Assignments[i].possible);
     }
     var percent = (Math.floor((earned/possible) * 100));

     console.log(percent);

  //grade letter

      if (percent >= 90){
         grade.innerHTML = '';
         grade.innerHTML = 'A ' + percent + '%';
      } else if (percent <= 89 && 80 >= percent){
         grade.innerHTML = '';
         grade.innerHTML = 'B ' + percent + '%';
      } else if (percent <= 79 && 70 >= percent){
         grade.innerHTML = '';
         grade.innerHTML = 'C ' + percent + '%';
      } else if (percent <= 69 && 60 >= percent){
         grade.innerHTML = '';
         grade.innerHTML = 'D ' + percent + '%';
      } else if(percent <= 59 && 0 >= percent){
         grade.innerHTML = '';
         grade.innerHTML = 'F ' + percent + '%';
      } else {grade.innerHTML = '';}



};

輸入幾次后,它將返回如下內容:

B = 73%? o!

我認為如果陳述有沖突,那可能是其他情況,但老實說,我不知道為什么這樣做。

如果else if s, else ifelse if向后進行比較,您使用的是70 >= percent而不是percent >= 70 (依此類推)。

另外,如果要為其分配其他內容,則沒有理由將''分配給innerHTML ,也沒有理由重復上限( percent <= 89等),因為您正在使用else if ,因此percent >= 90percent >= 90分支將已經被遵循。 重申它們也是一個維護問題(您將更改一個,但忘記更改另一個)。

所以:

if (percent >= 90) {
    grade.innerHTML = 'A ' + percent + '%';
} else if (percent >= 80) {
    grade.innerHTML = 'B ' + percent + '%';
} else if (percent >= 70) {
    grade.innerHTML = 'C ' + percent + '%';
} else if (percent >= 60) {
    grade.innerHTML = 'D ' + percent + '%';
} else if (percent >= 0) {
    grade.innerHTML = 'F ' + percent + '%';
} else {
    grade.innerHTML = '';
}

或者,當然,您可以使用地圖,因為您的成績邊界可以被10整除:

// Somewhere central
var grades = {
    6: 'D',
    7: 'C',
    8: 'B',
    9: 'A',
    10: 'A'
};

// ...then simply:
if (percent >= 0) {
    grade.innerHTML = (grades[Math.floor(percent / 10)] || 'F') + ' ' + percent + '%';
} else {
    grade.innerHTML = "Less than 0?!";
}

 var grades = { 6: 'D', 7: 'C', 8: 'B', 9: 'A', 10: 'A' }; function showGrade(percent) { var grade; if (percent >= 0) { grade = (grades[Math.floor(percent / 10)] || 'F') + ' ' + percent + '%'; } else { grade = "Less than 0?!"; } snippet.log(grade); } var n; for (n = 0; n <= 100; ++n) { showGrade(n); } 
 <!-- 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> 

If-Else條件范圍看起來不正確,請嘗試以下代碼...

var total = function (){
var earned = 0, possible = 0;
for(i = 0; i < Assignments.length; i++){
     possible += parseInt(Assignments[i].possible);
     earned += parseInt(Assignments[i].earned);
 }
 var percent = (Math.floor((earned/possible) * 100));

 console.log(percent);

  //grade letter

  if (percent >= 90){
     grade.innerHTML = 'A ' + percent + '%';
  } else if (percent >= 80 && percent <= 89){
     grade.innerHTML = 'B ' + percent + '%';
  } else if (percent >= 70 && percent <= 79){
     grade.innerHTML = 'C ' + percent + '%';
  } else if (percent >= 60 && percent <= 69){
     grade.innerHTML = 'D ' + percent + '%';
  } else if(percent >= 0 && percent <= 59){
     grade.innerHTML = 'F ' + percent + '%';
  } else {grade.innerHTML = '';}
};

盡管我已經優化了一些代碼,不需要在那里進行2個循環,但是您可以在單個循環中對earnedpossible變量進行求和,並且在元素中分配值時不需要.innerHTML = ''

我發現使用不同的比較方法的方法可以提高效率。 我仍然建議使用開關塊而不是if / else,但是從技術上講,它並不比您的解決方案好,但我認為它更易於閱讀。 這是一個代碼片段:

switch (true) {
case (0 <= val &&  val < 1000): /* do something */ break;
case (1000 <= val &&  val < 2000): /* do something */ break;
...
case (29000 <= val &&  val < 30000): /* do something */ break;
}

取自這篇文章。 還有一個有趣的表(在第一個答案中) Switch語句,用於表示大於/小於和使用不同的方法來實現此目的。 我知道這實際上不是您的答案的解決方案,但是如果您需要添加更多if / else並使用值來做一些巨大的列表,它可能會派上用場。

暫無
暫無

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

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