A quoi sert cette fonction ?

Signaler
Messages postés
96
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
10 février 2011
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
function is(x){return!!(x= ==0 ||x );}




Bonjour, que fait cette fonction ? Je pense qu'elle teste l'existence d'une variable d'aprés son nom, mais j'avoue que je ne vois pas bien son fonctionnement !
Pour moi la condition (x ===0||x) signifie "x est égal (en type et valeur) à 0 ou x a une autre valeur(qui renvoie true)"
Mais la où je bloque c'est à la double négation (!!) D'ailleurs en est-ce bien une ? Car pourquoi écrire une double négation ?

Merci de votre aide





S
apakus

13 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
Bonjour,

    de ch'tiots tests....

function is(x){return!!(x= ==0 ||x );}
function is(x){return(x == =0 ||x );}
function is(x){return(x ==0);}
...

alert(    is(0)+"\n"+

            is('0')+"\n"+

            is('00')+"\n"+


            is()+"\n"+

            is('toto')

            );

    undefined ou pas, string et/ou numérique....

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
943
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
7 août 2009
3
Bonjour,

C'est pas négation mais 2 pipes (alt gr +6 ;-) )
qui signifie ou.

<hr size="2" width="100%" />
Maelo ou Elo --> Mon blog

Si quelqu'un vous dit : "Je me tue à vous le répéter", laissez-le mourir. (Jacques Prévert)
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
je pense que sapakus parlait des !! juste derrière le return,
    pas des || dans la parenthèse maelob.
    ce qui permet de ne pas retourner undefined ici, enfin... au moins, je pense   ;o|
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
943
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
7 août 2009
3
oh... Désolée ^^

J'ai mal ouvert mes yeux mes excuses.

<hr size="2" width="100%" />
Maelo ou Elo --> Mon blog

Si quelqu'un vous dit : "Je me tue à vous le répéter", laissez-le mourir. (Jacques Prévert)
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
les yeux... après les dents ?  
c'est un message subliminal et perso à maelob que peu peuvent comprendre     ;o))
ou alors, uniquement si je leur passe ma boule de cristal....
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
943
Date d'inscription
mardi 14 novembre 2006
Statut
Membre
Dernière intervention
7 août 2009
3
humm, fait gaffe qu'il te l'abîme ta boule de cristal je l'ai déjà bien abîmée ;-)

Sinon sujet intéressant, j'aurai appris une chose aujourd'hui

<hr size="2" width="100%" />
Maelo ou Elo --> Mon blog

Si quelqu'un vous dit : "Je me tue à vous le répéter", laissez-le mourir. (Jacques Prévert)
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
Bonjour bien à tout(es),
un lien qui devrait vous
intéresser
http://blogs.codes-sources.com/cyril/archive/2008/01/27/l-instruction-en-javascript-_2D00_-la-double-n_E900_gation.aspx

plein de bonne choses a glaner pas là-bas...
;O)
Messages postés
96
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
10 février 2011
3
Merci pour ces réponses.

J'ai maintenant vu où se trouve l'ambiguïté.
En effet, en logique on a : !!(A||B)= (A||B)
Mais ici les propositions ne renvoient pas forcément true ou false d'où l'astuce de la double négation.

Ceci étant je n'ai pas trouvé de cas où on ne peut pas remplacer :





function is(x){return!!(x ===0||x);}







par





function is(x){return!!(x+1);}








qui donne la même chose avec le test de bultez !

Le is() renvoi !!(NaN) donc false.

Et je ne vois pas à quoi cette fonction pourrai servir d'autre.




Sapakus
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
petit bémol quand même
- avec undefined les deux retournent FAUX
- avec un
texte ou une valeur, 0 compris, les deux retournent VRAI

- avec null la tienne
retourne VRAI
- avec -1 la tienne retourne FAUX

on pourrait dire quelle teste si un objet est différent de


null






;O)
Messages postés
96
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
10 février 2011
3
Après glânage et retests, je me rend compte que cette fonction est imparable !

En effet, si on teste les valeurs suivantes:

is(null)
is(false)

qui renvoient false, on voit difficilement comment écrire autrement une telle fonction.

Merci à tous







S
apakus
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
>>sujet intéressant
    maelob++       ==>et pas simple
>>plein de bonne choses a glaner
    petoleTeam++   ==> et pas que !!
>>...ne renvoient pas forcément true ou false d'où l'astuce de la double négation
    sapkus++       ==>    avec !!, on est sûr que le retour est true ou false

par ordre alphabétique...
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
<table bgcolor="#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">

----,

> et pas que

</td>

</td>
</tr>
</tbody>
</table>...certes mais je
la vois bien pour un test d'existence d'objet...
if( is( document.getElementById('nom_div')){}

mais vous me direz on peu faire plus simple...
var Obj = document.getElementById('nom_div');
if(
Obj){}

ou encore...
if( Obj !null){}

cela reste, outre l'obscurantisme de
l'écriture, une amélioration de la lisibilité du code !!!!! et un bel exercice
de style...
;O)
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
>>obscurantisme de l'écriture
    doux euphémisme !
>> lisibilité du code
    fondamental !
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]