Будьте осторожны:
!a
принимает значение истина или ложь. Если преобразование a
в bool составляет true
, то !a
оценивает значение false.
Все положительные целые числа оцениваются до true
. Таким образом, !a
будет оценивать значение false. Сравнение с использованием double равно ==
по 1 будет проверять, что boolean !a
с булевым 1
или true
. Поэтому, если a
является положительным целым числом, так как я подозреваю, что тогда ваш оператор if
будет ВСЕГДА оценивать значение false.
Если вы хотите проверить, что-то не то, что вам нужно, чтобы изменить первые равные в вашем операторе сравнения (===
), чтобы быть !
.
E.g. var a = 2; if(a!==1) { // do something }
< - A равно 2, и поэтому сравнение if оценивается как true a
не1
.
В коде мы имеем:
var a = 2;
if(!a==1){
// a was 2 (or boolean true by default)
// but using ! has negated its boolean value
// so !a evaluates to boolean false
// which is being compared to 1 (evaluating to boolean true)
// so this if statement will never get here
}
Надежда, что помогает
P.S.Помните, ваши операторы сравнения:
!"hello world" == 0 // true
!"hello world" === 0 // false
Update
Я видел ваш комментарий на другой пост, который сказал, что a
является 0
пока что-то произойдет, то это 1
.
В этом случае:
var a = 0; // integer 0 or bool false
if(!a==1){ // if the bool opposite of 0 (false) is equal to 1 (true)
// well, opposite of false is true, so you're checking if true is equal to true
// so this will get called
e.preventDefault();
}
* Является ли выше код правильный * Почему вы спрашиваете? У вас проблемы? Если да, то какие? –
Что такое 'a'? Можете ли вы опубликовать его в своем коде? – elclanrs
Будьте осторожны, есть разница между '==' и '==='. Если вы хотите проверить, равен ли 'a' целому числу' 1', вы должны использовать 'a === 1'. См. Http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter-which-equal-operator-i-use для разницы. –