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 :

Conversion implicite ?


Sujet :

JavaScript

  1. #1
    Membre actif
    Homme Profil pro
    Reconversion
    Inscrit en
    novembre 2018
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2018
    Messages : 359
    Points : 201
    Points
    201
    Par défaut Conversion implicite ?
    Bonjour,

    Soucis de compréhension sur un petit exercice qui demande entre autres d'interpréter des nombres dans une chaine en char codes ascii afin de récupérer les lettres correspondantes puis de les inverser, rien de méchant sauf que comme d'habitude ma solution est bcp plus lourde que la correction !
    Voici la solution proposée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    const decrypt = (str) => {
      return str.replace(/'(.+?)'/g, (_, x) => String.fromCharCode(x)).split``.reverse``.join``
    }
    decrypt(4'101''99''105''108''65' '105''72'9);
    retourne "9Hi Alice4"
    ce que je ne comprends pas c'est comment le paramètre x est converti(?) en nombre lorsque il est passé à String.fromCharCode(), de plus, je n'avais jamais vu la notation qui remplace les parenthèses sur split(), reverse() et join()...
    Merci pour votre aide

  2. #2
    Membre expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    juin 2006
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : juin 2006
    Messages : 2 052
    Points : 3 638
    Points
    3 638
    Par défaut
    Citation Envoyé par olivier252 Voir le message
    je n'avais jamais vu la notation qui remplace les parenthèses sur split(), reverse() et join()...
    developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Litt%C3%A9raux_gabarits

    (sinon, les codes minifies comme ca, c'est pas mon delir...)
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  3. #3
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    août 2003
    Messages
    3 639
    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 639
    Points : 5 006
    Points
    5 006
    Par défaut
    Jamais vu avant de littéraux de gabarit pour appeler une méthode (mais bof, pas intuitif du tout);

    x "est" nombre!

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    mars 2009
    Messages
    2 305
    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 305
    Points : 5 027
    Points
    5 027
    Par défaut
    Citation Envoyé par javatwister Voir le message
    x "est" nombre!
    Que nenni, x est la chaîne du premier groupe de capture. Il y a bien conversion implicite de la part de String.fromCharCode() qui attend des nombres entiers en paramètres.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    août 2003
    Messages
    3 639
    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 639
    Points : 5 006
    Points
    5 006
    Par défaut
    Oui mais bon, implicitement je voulais dire que c'était implicite 😊

  6. #6
    Membre actif
    Homme Profil pro
    Reconversion
    Inscrit en
    novembre 2018
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2018
    Messages : 359
    Points : 201
    Points
    201
    Par défaut
    Hello, merci pour les réponses,

    A Doksuri, effectivement je savais que l'on pouvait utiliser les accents graves qui permettent d'interpréter les variables entre ${} afin d'éviter la concaténation mais la syntaxe sur les méthodes, je ne savais pas. Comme quoi une relecture un peu plus approfondie de la doc ne me fera pas de mal !
    Par contre y a pas une doc qui recense un peu les cas de conversion implicite ? (rien vu sur MDN ?) sinon je crois que je vais revenir tous les 2 jours lol...
    Merci à tous en tout cas, encore un sujet de bouclé

  7. #7
    Membre expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    juin 2006
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : juin 2006
    Messages : 2 052
    Points : 3 638
    Points
    3 638
    Par défaut
    je ne sais pas si ca peu aider a ta comprehension, mais tu peux faire ca : ['a','b','c'].forEach(console.log); (par exemple)
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  8. #8
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    août 2003
    Messages
    3 639
    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 639
    Points : 5 006
    Points
    5 006
    Par défaut
    2 ou 3 tests:

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    console.log(typeof "666");
    console.log(isNaN("666"));
    console.log(typeof String.fromCharCode("83","86","80"))
    console.log(String.fromCharCode("54","54","54")-12)
    console.log(typeof String.fromCharCode("54","54","54")-12)
    console.log(isNaN(String.fromCharCode("54","54","54")-12))
    console.log(isNaN("hello333world".replace(/\D/g,"")))

    Il y a bien quelques paradoxes mais pas si graves puisque tu peux toujours tester si tu as un doute;

  9. #9
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    mars 2009
    Messages
    2 305
    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 305
    Points : 5 027
    Points
    5 027
    Par défaut
    Petite précision pour la ligne dont le résultat peut sembler curieux: console.log(typeof String.fromCharCode("54","54","54")-12); // NaN (alors que console.log(String.fromCharCode("54","54","54")-12); // 654), il s'agit juste d'une histoire de précédence des opérateurs.

    La précédence de typeof est plus élevée que celle de l'opérateur de soustraction -, donc la ligne est interprétée de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    console.log( (typeof String.fromCharCode("54","54","54")) - 12 );
     
    // soit:
    console.log( (typeof "666") - 12 );
     
    // soit:
    console.log( "string" - 12 ); // NaN
    D'où le résultat de NaN.

    Pour avoir le résultat "attendu", il faut placer des parenthèses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    console.log( typeof (String.fromCharCode("54","54","54") - 12) );
     
    // soit:
    console.log( typeof ("666" - 12) ); // conversion implicite en Number
     
    // soit:
    console.log( typeof 654 ); // "number"
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  10. #10
    Membre actif
    Homme Profil pro
    Reconversion
    Inscrit en
    novembre 2018
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2018
    Messages : 359
    Points : 201
    Points
    201
    Par défaut
    Très interessant, merci beaucoup pour ce complément d'information
    Pour apporter une petite touche d'humour en ce week end ensoleillé (par chez moi en tt cas à Bordeaux) j'ai trouvé cette petite citation dans mes recherches de tutos

    Implicit conversions are my biggest regret in JS's rushed design, bar none. Even including 'with'!
    inutile de préciser le nom de l'auteur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion implicite d'un type vers un autre
    Par Pragmateek dans le forum C++
    Réponses: 5
    Dernier message: 13/09/2007, 21h42
  2. conversion implicite etrange
    Par maxmarie dans le forum VB.NET
    Réponses: 4
    Dernier message: 22/06/2007, 10h48
  3. [9i]Conversion implicite ?
    Par lunab54 dans le forum SQL
    Réponses: 7
    Dernier message: 19/04/2007, 14h49
  4. [C#] Conversion implicite de type object vers int
    Par alexking2005 dans le forum C#
    Réponses: 5
    Dernier message: 02/01/2007, 10h02
  5. [jdbc][oracle] conversion implicite erronée
    Par Jack Huser dans le forum JDBC
    Réponses: 2
    Dernier message: 30/06/2005, 10h23

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