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 :

Boucle for orientée objet


Sujet :

JavaScript

  1. #1
    Membre éclairé Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Par défaut Boucle for orientée objet
    Bonsoir tout le monde.
    Je suis débutant en javascript et j'ai besoin de votre aide pour comprendre pourquoi un code ne marche pas.
    Ce premier code marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var p="";
    var identite={
    	nom:"Bidou",
    	prenom:"Nanou",
    	age:23
    };
    for(var elem in identite){
    	p+=identite[elem] +"\n";
    }
    alert(p);
    J'ai comme résultat:
    Bidou
    Nanou
    23
    Avec le code suivant, j'attends au même résultat, mais non, je n'ai rien comme comme affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var identite={
    	nom:"Bidou",
    	prenom:"Nanou",
    	age:23
    };
    alert(identite[nom] +"\n"+identite[prenom] +"\n"+identite[age] +"\n");
    Pourquoi?
    Merci

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 660
    Par défaut
    avez-vous vu l'erreur dans la console de développement ?

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    J'ai suivi le conseil de Mathieu car cela m’intéressait de savoir pourquoi ça marche pas...

    Il nous dit : Uncaught ReferenceError: nom is not defined...

    Et voilà ce que je comprends : quand on écrit : identite[nom] alors "nom" est considérée comme une variable or celle-ci n'est définie nulle part (cette variable est "undefined") ! Si on met juste avant : var nom = "nom"; cela marche mais pour accéder à la propriété "nom" de l'objet "identite" on peut directement écrire identite["nom"] et ça marche mais là on nous dit qu'il est préférable d'utiliser la notation avec le point : identite.nom...

  4. #4
    Membre chevronné
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Puisque vous demandez votre "langue au chat":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var identite={
    	nom:"Bidou",
    	prenom:"Nanou",
    	age:23
    };
    alert(identite['nom'] +"\n"+identite['prenom'] +"\n"+identite['age'] +"\n");

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 506
    Par défaut
    ou bien tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var identite={
    	nom:"Bidou",
    	prenom:"Nanou",
    	age:23
    };
    alert(identite.nom +"\n"+identite.prenom +"\n"+identite.age +"\n");

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    [...] Et voilà ce que je comprends : quand on écrit : identite[nom] alors "nom" est considérée comme une variable or celle-ci n'est définie nulle part (cette variable est "undefined") ! Si on met juste avant : var nom = "nom"; cela marche mais pour accéder à la propriété "nom" de l'objet "identite" on peut directement écrire identite["nom"] et ça marche mais là on nous dit qu'il est préférable d'utiliser la notation avec le point : identite.nom...
    C'est toujours du texte. C'est seulement lorsque la clé est formée d'un seul mot que l'on peut omettre les guillemets et utiliser la notation "objet.clef"

    Exemple :

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    let identite = {
    	"nom de l'écrivain" : "Bidou",
    	"prénom de l'éditeur" : "Nanou",
    	"âge du concierge" : 23
    };
     
    // debug, console, touche F12
    console.log( identite[ "nom de l'écrivain" ], identite[ "prénom de l'éditeur" ], identite[ "âge du concierge" ] );

    C'est par facilité que l'on utilise le francais sans accents ou l'anglais et que l'on regroupe les mots composés en utilisant le "camelCase".

    Exemple :

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let identite = {
    	nomEcrivain : "Bidou",
    	prenomEditeur : "Nanou",
    	ageConcierge : 23
    };
     
    console.log( identite.nomEcrivain, identite.prenomEditeur, identite.ageConcierge );

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message
    C'est toujours du texte. C'est seulement lorsque la clé est formée d'un seul mot que l'on peut omettre les guillemets et utiliser la notation "objet.clef"
    Merci et +1 !

    Si j'ai bien compris, j'en déduis que si on veut que la clé soit formée de plus d'un mot il faut utilisé les guillemets, c'est bien ça ?

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 202
    Par défaut
    Bonjour,
    ...on veut que la clé soit formée de plus d'un mot il faut utilisé les guillemets, c'est bien ça ?
    oui mais à mon sens cette technique est une mauvaise approche et comme l'a dit danielhagnoul utilise le « camelCase ».

    La notation objet["propriete"] est néanmoins préférable si malheureusement on utilise une propriété faisant partie des mots réservés, même si les navigateurs modernes arrivent à faire la différence.

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    Bonjour,
    oui mais à mon sens cette technique est une mauvaise approche et comme l'a dit danielhagnoul utilise le « camelCase ».

    La notation objet["propriete"] est néanmoins préférable si malheureusement on utilise une propriété faisant partie des mots réservés, même si les navigateurs modernes arrivent à faire la différence.
    Merci et +1 ! Oui moi aussi ça me dit rien d'utiliser plusieurs mots et des guillemets, je ne trouve pas que ce soit plus lisible et c'est plus lourd...

    Mais je voulais parlé de la clé (si c'est bien comme ça que ça s'appelle), le nom de la propriété dans l'objet, exemple :

    Y a-t-il une différence entre ça : var obj = { nom: "Jean"} et ça var obj = { "nom": "Jean"} ?

    Oui parce qu'il me semble avoir déjà vu des guillemets dans les "clés" mais peut-être que je confond avec autre chose (du JSON peut-être ?)...

  10. #10
    Membre très actif
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 744
    Par défaut
    jour

    le premier est un objet javascript et le second un objet json dans la manipulation il y a une différence mais je me rappel plus laquel

  11. #11
    Membre éclairé Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Par défaut
    Bonsoir
    Merci pour vos réponses.
    Ce qui m'intéresse c'est de savoir pourquoi le deuxième code ne marche pas, et non pas arriver au résultat.
    Donc je suis intéressé par le code donné par eleydet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var identite={
    	nom:"Bidou",
    	prenom:"Nanou",
    	age:23
    };
    alert(identite['nom'] +"\n"+identite['prenom'] +"\n"+identite['age'] +"\n");
    Effectivement ce code marche, mais je me demande toujours la chose suivante:
    Dans mon 1er code qui marche, càd la boucle for, elem représente successivement, nom, prenom et age et non pas 'nom', 'prenom' et 'age', et d'autre part dans la boucle for j'ai utilisé identite[elem] et non identite['elem']
    merci à vous

  12. #12
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    @melka one : Merci et +1, à suivre...

    Citation Envoyé par stracoma Voir le message
    Effectivement ce code marche, mais je me demande toujours la chose suivante:
    Dans mon 1er code qui marche, càd la boucle for, elem représente successivement, nom, prenom et age et non pas 'nom', 'prenom' et 'age', et d'autre part dans la boucle for j'ai utilisé identite[elem] et non identite['elem']
    merci à vous
    C'est ce que j'expliquais (ou essayais d'expliquer) dans mon message #3.

    L’erreur est je pense dans ta phrase en gras justement, car "elem" est une variable de type string qui contient successivement les strings : 'nom', 'prenom' et 'age'...

    Regarde ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var p="";
    var identite={
      nom:"Bidou",
      prenom:"Nanou",
      age:23
    };
    for(var elem in identite){
      p+=identite[elem] +"\n";
      console.log("type de elem : |" + typeof(elem) + "| valeur de elem : |"+elem + "|");
     
    }
    On obtient ceci dans la console :
    "type de elem : |string| valeur de elem : |nom|"
    "type de elem : |string| valeur de elem : |prenom|"
    "type de elem : |string| valeur de elem : |age|"
    Tu peux tester ici : http://jsbin.com/gozehucaxi/edit?js,console

    Et comme je disais :
    Et voilà ce que je comprends : quand on écrit : identite[nom] alors "nom" est considérée comme une variable or celle-ci n'est définie nulle part (cette variable est "undefined") ! Si on met juste avant : var nom = "nom"; cela marche mais pour accéder à la propriété "nom" de l'objet "identite" on peut directement écrire identite["nom"] et ça marche mais là on nous dit qu'il est préférable d'utiliser la notation avec le point : identite.nom...
    Ainsi si on met ceci : var nom = "nom" avant l'instruction identite[nom] cela fonctionne car du coup la variable nom est définie et contient la string "nom"... Et dans ta boucle c'est ce qui se passe, c'est comme si on avait :

    - premier tour 1 : elem = "nom"; p+=identite[elem] +"\n";.
    - second tour : elem = "prenom"; p+=identite[elem] +"\n";.
    - et enfin troisième tour : elem = "age"; p+=identite[elem] +"\n";
    Citation Envoyé par stracoma Voir le message
    ... et d'autre part dans la boucle for j'ai utilisé identite[elem] et non identite['elem']
    Si on écrit : identite[elem]; on a la variable elem entre les crochets... alors que dans l'instruction identite["elem"]; on a la constante "elem" entre les crochets...

    En espérant que ce soit plus clair cette fois-ci...

  13. #13
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 202
    Par défaut
    Citation Envoyé par stracoma
    Ce qui m'intéresse c'est de savoir pourquoi le deuxième code ne marche pas,...
    une lecture plus attentive des réponses et tu aurais eu ta réponse

  14. #14
    Membre éclairé Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Par défaut
    Bonsoir. J'ai enfin compris
    Merci à vous

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

Discussions similaires

  1. Problème avec boucle "for each" :objet requis
    Par maroonx dans le forum Macros et VBA Excel
    Réponses: 37
    Dernier message: 15/05/2016, 11h41
  2. [2.x] Twig, boucle for imbriquées et accès aux variables et objets
    Par cid007300 dans le forum Symfony
    Réponses: 1
    Dernier message: 12/03/2014, 08h59
  3. Supprimer plusieurs objet en une et une seule boucle for
    Par Beber_lechat dans le forum Langage
    Réponses: 5
    Dernier message: 23/09/2010, 09h44
  4. [POO] parcourir un objet json avec une boucle for in
    Par bucheron007 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 19/01/2009, 12h55
  5. Création d'objets dans une boucle for
    Par urban_p dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/06/2008, 10h34

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