A quoi sert cette fonction ?

sapakus Messages postés 96 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 10 février 2011 - 6 juin 2008 à 12:09
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 6 juin 2008 à 16:19
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

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 juin 2008 à 12:24
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]
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
6 juin 2008 à 13:33
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)
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 juin 2008 à 13:37
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]
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
6 juin 2008 à 13:39
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 juin 2008 à 13:45
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]
0
maelob Messages postés 943 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 7 août 2009 3
6 juin 2008 à 14:21
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)
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
6 juin 2008 à 15:20
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)
0
sapakus Messages postés 96 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 10 février 2011 3
6 juin 2008 à 15:23
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
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
6 juin 2008 à 15:39
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)
0
sapakus Messages postés 96 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 10 février 2011 3
6 juin 2008 à 15:44
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
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 juin 2008 à 15:46
>>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]
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
6 juin 2008 à 15:58
<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)
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 juin 2008 à 16:19
>>obscurantisme de l'écriture
    doux euphémisme !
>> lisibilité du code
    fondamental !
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
Rejoignez-nous