2013-03-06 3 views
-2

Я здесь борюсь с этим кодом прямо здесь. Работа над CodeAcademy и я столкнулись с этой мелочью, которая меня озадачила. Как вы можете видеть, я сначала проверяю, меньше или равно 0,3. Затем я проверяю else, если выбор компьютера меньше или равен 0,66, и завершаю все это с помощью заключительной инструкции else.Javascript меньше, чем переопределение других, чем условия?

Однако не следует так или иначе вмешиваться или мешать, так как вы можете видеть, как else if, так и else и if будут устанавливать переменную computerChoice в нужную строку в зависимости от того, что представляет собой случайное число. Но так как 0,23 меньше 0,66, так как 0,23 меньше 0,33, оба оператора if должны установить переменную в свою собственную строку.

Почему это действительно работает, когда я думаю, что это не должно. Это так, как это делает JavaScript? Первые утверждения if переопределяют предстоящие?

var userChoice = prompt("Do you choose rock, paper or scissors?"); 
var computerChoice = Math.random(); 
if (computerChoice <= 0.33){ 
    computerChoice = "rock"; 
}else if(computerChoice <=0.66){ 
    computerChoice = "paper"; 
}else{ 
    computerChoice = "scissors"; 
} 

Спасибо за все, надеюсь предстоящей помощь :)

ответ

4

else if части будет оцениваться только если условие if ложно. Таким образом, конфликта нет, первое условие соответствия используется, когда у вас есть серия if...else if...else if...else.

Так в 0.22 случае, потому что

if (computerChoice <= 0.33) 

оценивает true, ни один из else if или else условий не проверяется. Элемент управления вводит блок, связанный с if, и устанавливает значение переменной "rock".

В 0.44 случае (например), так как условие if оценивает ложно, else if (computerChoice <= 0.66) тестируется   — и потому что он оценивает истинно, блок, связанный с , что получает вошел и значение переменной получает значение "paper".

В случае всех значений выше 0.66 оба первых двух условия оценивают значение false, поэтому вводится блок, связанный с окончательным else, и устанавливает значение "scissors".

+0

Ааа, я вижу. Благодарю вас тогда :) – user2097217

1

Предложение из if..else заявления else не выполняет если предложение if совпадают.
Другими словами, один и только один из кодовых блоков внутри if..else когда-либо выполнялся, остальное - нет.

0

, который не будет создавать проблемы, потому что вы используете еще в втором заявлении

else if(computerChoice <=0.66){ 
    computerChoice = "paper"; 

это также косвенно означает, что computerChoice является> 0,33. Это создало бы проблемы в таком случае, как это:

if(computerChoice <=0.66){ 
    computerChoice = "paper"; 
else if(computerChoice <= 0.33) 
    computerChoice = "rock"; 

это потому, что он никогда не будет входить утверждение еще, как будто computerChoice является < = 0,66 это также всегда очевидно < = 0,33