2015-04-23 2 views
-5

Я реализую обязательный слайдер в моем проекте. А следующий код работал отлично:Разница между тестовыми выражениями

else if(current - 1 === sliderLength){ 
    current = 1; 
    loc = 0 
} 

Но это не работает, как ожидалось:

else if(current === sliderLength - 1){ 
    current = 1; 
    loc = 0 
} 

Итак, что разница между current === sliderLength - 1 и current - 1 === sliderLength?

+0

Серьезно? Разница в том, что они * совершенно разные *. Вы производите и сравниваете два разных числа в каждом случае. Это то, что вы должны искать в отладчике или с помощью операторов журнала. –

+0

Я с Крисом, это должно быть очень очевидно - на самом деле написать этот вопрос занял, наверное, дольше, чем вам нужно было бы подумать об этом ... – mfeineis

+0

серьезно, я не понимаю этого факта. –

ответ

1

давайте ток = 6 и бегунок = 5

Давайте возьмем пример

current - 1 === sliderLength // 5 === 5 ; true statement 

current === sliderLength - 1 // 6 ===4 ; that's a false statement 
2

Я переименовывать переменную х и у для краткости, а просто включить соответствующую часть:

if (x - 1 === y) vs if (x === y - 1)

Если вам нелегко увидеть ди а просто попробуйте оба их для некоторых случайных значений для x и y. Давайте попробуем x = 3, y = 2

Итак, первый один становится:

if (3 - 1 === 2) или if ((3 - 1) === 2) или if (2 === 2) (т.е. true)

Второй один вид:

if (3 === 2 - 1) или if (3 === (2 - 1)) или if (3 === 1) (т.е. false)

The i Важно отметить, что операция сравнения (===) происходит после операции вычитания. На самом деле это даже не так важно в этом случае, но что-то отметить.

+0

Очень воспитательное объяснение. Обратите внимание, что '===' не проверяет только на равенство значений, но также и на * type * равенство. Может ли это повлиять на текущий случай? – mins

+0

Наверное, не в этом случае ... значения звучат так, как будто они целые ... –

0

Попробуйте это:

else if(current === sliderLength + 1){ 
    current = 1; 
    loc = 0 
}