IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Syntaxe Javascript non comprise


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 13
    Par d�faut Syntaxe Javascript non comprise
    Bonjour,
    en surfant sur diff�rent site je retrouve souvent des lignes de codes dont je ne comprends pas la syntaxe, ni ce qu'elles font.
    Exemple
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (navigator.platform) {                                               //win32
        var ptf = ("" + navigator.platform).toLowerCase();    //ptf  = win32
        "mac" != ptf.substr(0, 3) && (is_osx = !1)		 //   ==> que fait cette ligne : pas une affectation : des tests à priori mais pas dans un if, ni d'affectation. Je ne comprend pas l'intérêt de ce genre de ligne ?
    }
     
    Ou bien encore (toujours dans le même style)
    var ua = navigator.userAgent.toLowerCase();
    0 <= ua.indexOf("safari") && -1 == ua.indexOf("chrome") && (is_safari = !0);    //la encore que fait cette ligne  ??
    0 <= ua.indexOf("chrome") && (is_safari || is_firefox || (is_chrome = !0));
    Il y a une notion javascript qui doit m'�chapper.

    Merci pour vos explications.

  2. #2
    Expert confirm� Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activit� : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    "mac" != ptf.substr(0, 3) && (is_osx = !1)
    C'est effectivement un "if" ou plut�t une mani�re de faire un "if". Le principe est simple, il consiste � exploiter le comportement du "et" logique (&&):
    dans une condition avec plusieurs assertions s�par�es par &&, toutes les assertions doivent �tre v�rifi�es pour que cette condition r�ussisse. Ce qui signifie que si la premi�re assertion est v�rifi�e alors on teste la deuxi�me et ainsi de suite. Par contre, d�s qu'une assertion n'est pas v�rifi�e, la condition est alors fausse et il est inutile de tester les assertions suivantes (car quelque soit leur r�sultat �a ne changera rien). Ceci a pour cons�quence que ces assertions sont tout simplement ignor�es comme si elles n'existaient pas.

    Pour en revenir au bout de code, si la condition "mac" != ptf.substr(0, 3) �choue, l'affectation is_osx = !1 n'aura pas lieu (contrairement � la guerre de Troyes), si elle r�ussit l'affectation is_osx = !1 aura lieu.

    D�tail syntaxique, le pourquoi des parenth�ses autour de l'affectation:
    C'est simplement d� � la pr�c�dence des op�rateurs, la pr�c�dence de && est plus �lev�e que celle de =, donc en mettant l'affectation entre parenth�ses, je m'assure que cette ligne n'est pas interpr�t�e comme: ("mac" != ptf.substr(0, 3) && is_osx) =!1 (ce qui ne voudrait pas dire grand chose vue que "mac" != ptf.substr(0, 3) && is_osx ne constitue pas une lvalue.)

    Quant au !1, c'est juste une mani�re plus courte d'�crire false.

    Bref, cette ligne peut plus clairement s'�crire:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    if ( "mac" != ptf.substr(0, 3) ) {
        is_osx = false;
    }
    De la m�me mani�re avec le "ou" logique, on peut faire un if then else de cette mani�re: assertion && then || else.
    (Le || quant � lui �value la suite si l'assertion pr�c�dente �choue).

    Ce type d'�criture un peu cryptique �mane plut�t du geek qui aime ce genres de raccourcis (quoi qu'il en soit �a reste relativement courant), mais plus fr�quemment on peut le rencontrer lorsqu'un code est pass� par un minifier pour r�duire sa taille.

    Les autres lignes fonctionnent sur le m�me principe.

  3. #3
    Expert confirm�
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Ao�t 2003
    Messages
    3 684
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activit� : danseur

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 3 684
    Par d�faut
    joli

    Mais quitte � condenser, j'aurais plut�t fait �a:
    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    const is_osx=ptf.substr(0,3)=="mac";
    �a �vite d'avoir � d�clarer is_osx au pr�alable

  4. #4
    Membre �m�rite
    Femme Profil pro
    Service informatique presque � moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Ao�t 2017
    Messages
    358
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 57
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Service informatique presque � moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Ao�t 2017
    Messages : 358
    Par d�faut Merci pour cet �claircissement
    Ma culture informatique avait bien besoin de cette explication !
    Malgr� la clart� de la formulation de CosmoKnacki, autant je crois (j'ai cru ?) comprendre la ligne 8, autant cela je suis perplexe pour la 9
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    0 <= ua.indexOf("chrome") && (is_safari || is_firefox || (is_chrome = !0));
    Comment on pourrait tomber sur une valeur vraie de is_safari si c'est � la ligne pr�c�dente que se fait l'affectation? Qu'est-ce que je rate ?

    Et attention de ne pas induire en erreur les n�ophytes qui pourraient confondre Troie, sa guerre, son cheval, Giraudoux, avec Troyes, sa bataille (1940), son andouillette, Chr�tien (de)

  5. #5
    Expert confirm� Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activit� : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par d�faut
    Si on prend les deux derni�res lignes:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    0 <= ua.indexOf("safari") && -1 == ua.indexOf("chrome") && (is_safari = !0);
    0 <= ua.indexOf("chrome") && (is_safari || is_firefox || (is_chrome = !0));
    L'affection de is_safaritrue (!0) ne se produit que si la condition 0 <= ua.indexOf("safari") && -1 == ua.indexOf("chrome") r�ussit. Mais dans le cas contraire, on peut supposer que is_safari est � false (ou quelque chose qui peut se caster en false comme undefined). On peut aussi supposer qu'il en est de m�me pour is_firefox (qui doit �tre trait� avant, dans une partie qui n'appara�t pas dans l'extrait).
    Donc, dans ce cas, on a dans la derni�re ligne:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    0 <= ua.indexOf("chrome") && (is_safari || is_firefox || (is_chrome = !0));
    // ^                          ^-- false    ^-- false      ^-- l'affectation de is_chrome a lieu
    // |
    // +--- on trouve "chrome" dans la chaîne ua du user agent (donc true)
    Si dans le cas contraire is_safari ou is_firefox sont � true, on arr�te les frais car la condition a r�ussi, et l'affection de is_chrome n'a pas lieu.

    Pour rappel sur ce type de notation:
    • Avec &&: on continue si c'est true, on s'arr�te si c'est false
    • Avec ||: on continue si c'est false, on s'arr�te si c'est true


    (� noter que c'est se donner beaucoup de mal pour quelque chose qu'on peut aussi facilement baratiner qu'un user agent.)

Discussions similaires

  1. Syntaxe Javascript/jQuery non comprise
    Par M�dinoc dans le forum jQuery
    R�ponses: 1
    Dernier message: 13/01/2012, 16h54
  2. Syntaxe non comprise
    Par grassel dans le forum Mise en page CSS
    R�ponses: 2
    Dernier message: 29/03/2009, 20h02
  3. [XSLT] Syntaxe des namespaces (ns:tag) non comprise
    Par LoK dans le forum XSL/XSLT/XPATH
    R�ponses: 7
    Dernier message: 31/12/2006, 10h39
  4. erreur de syntaxe javascript dans ma page
    Par Oluha dans le forum G�n�ral JavaScript
    R�ponses: 7
    Dernier message: 01/02/2005, 14h53
  5. Variables javascript non correctement d�finies
    Par LLaurent dans le forum XMLRAD
    R�ponses: 5
    Dernier message: 11/05/2004, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo