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
Version imprimable
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 :
Citation:
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 8O
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 :aie:
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'elleCode:
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:
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:
1
2
3
4
5
6 for (var i in obj) { if(typeof obj[i]=='string') { obj[i] = obj[i].toUpperCase(); } }