attenzione:
!a
restituisce true o false. Se una conversione di a
in una bool è true
, allora !a
restituisce false.
Tutti gli interi positivi valutano a true
. Quindi !a
valuterà su falso. Un confronto utilizzando il doppio equivale da ==
a 1 verificherà che il valore booleano !a
con il valore booleano 1
o true
. Quindi se a
è un numero intero positivo come sospetto che sia allora l'istruzione if
verrà SEMPRE valutata su false.
Se si desidera testare qualcosa NON è altro, è necessario modificare i primi equals nell'operatore di confronto (===
) in modo che sia !
.
E.g. var a = 2; if(a!==1) { // do something }
< - A è 2 e quindi il confronto se wille vale true come a
non uguale a uguale a 1
.
Nel codice che abbiamo:
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
}
Speranza che aiuta
P.S.Ricordatevi dei vostri operatori di confronto:
!"hello world" == 0 // true
!"hello world" === 0 // false
Aggiornamento
Ho visto il tuo commento su un altro post, che ha detto che è a
0
finché non succede qualcosa, allora è 1
.
In questo caso:
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();
}
fonte
2012-02-21 10:54:30
* è il codice di cui sopra corretto * perché me lo chiedi? Hai problemi? Se sì, quali? –
Cos'è 'a'? Puoi postarlo nel tuo codice? – elclanrs
Fai attenzione, c'è una differenza tra '==' e '==='. Se vuoi controllare se 'a' è uguale all'intero' 1', allora dovresti usare 'a === 1'. Vedi http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter-which-equal-operator-i-use per la differenza. –