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 :

erreur signalée par jslint sur boucle for in


Sujet :

JavaScript

  1. #1
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut erreur signalée par jslint sur boucle for in
    dans mon script je boucle sur un objet json avec for in. Or JS Lint me dit que el body du for doit etre englobé dans un test if ?
    Pour un array à la limite je le comprends... mais un json

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Les explications de Douglas Crockford :
    L’instruction for in peut parcourir en boucle tous les noms de propriété d’un objet.
    L’énumération inclut toutes les propriétés (dont les propriétés de fonction et les propriétés
    de prototype qui pourraient ne pas vous intéresser). Il est donc nécessaire de filtrer
    les valeurs que vous ne souhaitez pas. Les filtres les plus courants sont la méthode
    hasOwnProperty et le recours à typeof pour exclure les fonctions.

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Oui Beef.
    mais hasOwnProperty sur un json

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Je suis bien d'accord avec toi, mais je ne suis pas convaincu que jslint se soucie de la nature de l'objet sur lequel tu boucles

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Points : 496
    Points
    496
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Oui Beef.
    mais hasOwnProperty sur un json
    Imagine qu'un gros boulet qui crois tout savoir en JS et qui croit qu'on peut modifier le prototype de Object, ajoute une nouvelle méthode sur le prototype de Object :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Object.prototype.kikoolol = function() {
       //fonction kikoolol
    }
    Maintenant imaginons que nous ayons dans une hashmap composée que de strings et qu'on veut modifier chacune d'elle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var obj = {
     a : 'kikoo',
     b : 'lol'
    }
    for (var i in obj) {
      obj[i] = obj[i].toUpperCase();
    }
    ben on va à un moment tomber sur kikoolol qui est une fonction et non une string et donc boummmm !!!!.

    Donc il faut tester le type de ton objet, car normalement tu connais le type de ta map.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (var i in obj) {
       if(typeof obj[i]=='string') {
          obj[i] = obj[i].toUpperCase();
       }
    }
    Mais comme je le dis souvent : Il ne faut pas modifier le prototype de Object, c'est le type de base et il vaut mieux éviter surtout lorsqu'on a des cas de JS comme celui que je viens de citer.

Discussions similaires

  1. [XL-2003] Erreur 1004 sur boucle For each
    Par JonSnow dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/04/2010, 13h22
  2. demande explication sur boucle "FOR"
    Par maori dans le forum Général Python
    Réponses: 4
    Dernier message: 02/01/2009, 17h37
  3. Erreur sur boucle for
    Par philippef dans le forum Langage
    Réponses: 2
    Dernier message: 04/07/2008, 13h44
  4. Blocage sur boucle for
    Par guillaume17 dans le forum Langage
    Réponses: 20
    Dernier message: 01/07/2008, 16h03
  5. [BATCH] Aide sur boucle for et test
    Par t_om84 dans le forum Windows
    Réponses: 3
    Dernier message: 07/06/2006, 10h12

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