"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:
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.
Partager