L'instruction !! en JavaScript
En JavaScript tout peut être évalué comme étant un Boolean. Voici les valeurs qui retournent false :
var falses = [
false,
undefined, // valeur retourné lorsqu'on tente d'accéder à une variable/propriété inexistante
null,
0,
''
];
for(var i = 0, l = falses.length; i < l; i++){
if (falses[ i ]){
Sys.Debug.trace('je suis jamais affiché' + i);
}
}
Tous le reste retourne true y compris 'false', '0'.
L'instruction !! (double négation) nous permet donc d'obtenir rapidement un boolean à partir de n'importe quelle valeur qui retourne vrai. J'utilise cette astuce pour m'assurer que l'on m'envoie bien un boolean.
setValue : function(value){
/// <value type="Boolean"></value>
this._value = !!value;
// équivalent de
this._value = value ? true : false;
// ou encore de
if (value)
this._value = true;
else
this._value = false;
}
Si l'on veut savoir si value est bien un type boolean alors on utilisera l'opérateur === (strict equality operator) ou alors l'instruction typeof.
var falses = [
false,
undefined, // valeur retourné lorsqu'on tente d'accéder à une variable/propriété inexistante
null,
0,
''
];
for(var i = 0, l = falses.length; i < l; i++){
if(falses[ i ] === false){ // if (typeof(falses[ i ]) == 'boolean' && !falses[ i ]){
Sys.Debug.trace('j\'affiche seulement le premier false');
}
}
Attention cependant à la méthode valueOf de Object qui permet d'avoir des choses surprenantes :
var o = {
valueOf : function(){return false;}
};
if (o == false)
Sys.Debug.trace('je suis affiché"');
if (o === false)
Sys.Debug.trace('je ne suis pas affiché');
if (!o)
Sys.Debug.trace('je ne suis pas affiché');