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
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
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.
Oui Beef.
mais hasOwnProperty sur un json
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
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 :
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 Object.prototype.kikoolol = function() { //fonction kikoolol }
ben on va à un moment tomber sur kikoolol qui est une fonction et non une string et donc boummmm !!!!.
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(); }
Donc il faut tester le type de ton objet, car normalement tu connais le type de ta map.
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.
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(); } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager