2013-07-30 4 views
0

Этот код, кажется, зацикливается на добавлении 1 к player1.score до тех пор, пока оценка не будет равна === тому, что я положил во второй оператор if. Кто-нибудь знает, почему?Мой метод срабатывает, когда он не должен

pointScored: { 
     startNextSet: function(Scorer) { 
      if (gameController.bananasTaken < 3 && Scorer === "player1") { 
         console.log(gameController.player1.score); 
         gameController.player1.score += 1; 
        if (gameController.player1.score === 10 && 
         gameController.bananasTaken === 0 && 
         gameController.player1.bananaCount === 0) { 
          console.log(gameController.player1.score); 
          gameController.updatePlayerStats(gameController.Banana1, 20, gameController.canvas.height 
          - 20 - gameController.Banana1.height, gameController.player1, "left"); 
          console.log("player 1's first point"); 


        } 

В настоящее время я изучаю использование отладчика, но думал, что оставлю это здесь, чтобы узнать, знает ли кто-нибудь почему. Благодарю.

+3

Шаг над кодом с отладчиком. – DCoder

+3

Это ужасно. Вам нужно использовать && и || операторы. – Virus721

+0

Эта строка: 'gameController.player1.score + = 1;' появляется перед 'if (gameController.player1.score === 5)' – gvee

ответ

2

Есть вероятность, что ваши значения будут оцениваться как строки. Оператор === не делает никаких преобразований типов, поэтому он быстрее.

Рассмотрите возможность изменения оценки ==. Эта же проблема возникла в another question.


Я переработан код немного & использовал == обозначения я предлагаю выше. Попробуйте запустить его и скажите, работает ли он.

pointScored:{ 
startNextSet: function(Scorer) { 
    gc=gameController; //to save thy fingers from typing ache 
if (gc.bananasTaken > 2 || Scorer !== "player1") 
    return; 

    console.log(gc.player1.score); // this logs 6 times from 0 to 5 
    gc.player1.score += 1; 
    if (gc.player1.score == 5 && gc.bananasTaken == 0) { 
     alert(gc.player1.score); //*******! 
     if(gc.player1.bananaCount == 0) { 
      gc.updatePlayerStats(gc.Banana1, 20, gc.canvas.height - 20 - gc.Banana1.height, gc.player1, "left"); 
      console.log("player 1's first point"); 
     } 
    } 
} 

}

+0

Не будет ли это срабатывать _less_, чем нужно, а не _more_? – Barmar

+0

Что это значит? @Barmar – rath

+0

Точные сравнения более строгие. Таким образом, есть случаи, когда '==' будет соответствовать, но '===' не будет. Итак, почему вы думаете, что '===' заставляет 'if' преуспеть, если это не так? – Barmar

1

Как я смотрю на вашу функцию, кажется, что эта логика должна быть внутри объекта gameController.

+0

Спасибо. Это, вероятно, должно быть для лучшей практики, но почему бы ему заставить себя действовать по-другому? это решение проблемы, но да, было бы хорошо сделать – user2602079

+2

Решение вашей проблемы начинается с очистки кода. – jgroenen

+0

По какой-то причине я забыл, но pointScored на самом деле находится внутри gameController. Это объект в gameController. Это должно быть хорошей практикой да «Главное, что я сделал бы, чтобы очистить этот код, - это изменить его на &&, а не ifs (я обычно делаю), но это будет выглядеть довольно сложным. – user2602079

Смежные вопросы