Page 1 sur 1

[javascript] Bonnes pratiques.

Posté : 14 mars 2011, 14:49
par Berzemus
Ivo Wetzel et Zhang Yi Jiang ont compilé un fantastique aperçu des petits travers de Javascript, avec pour chacun une explication, une réponse et une conclusion.

http://bonsaiden.github.com/JavaScript- ... r.timeouts

Quelques-unes particulièrement intéressantes:

La structure for (... in ...) est extrêmement inefficace pour parcourir un tableau (comparativement à une boucle classique for (var i=0,l=length; i<l; i++) )), puisqu'elle parcourt toutes les propriétés (donc non désirables) de l'objet Array, en plus d'être bien plus lente.

Lors d'un for (... in ...) il est utile d'utiliser le .hasOwnProperty pour distinguer ce qui appartient directement à un objet de ce que contiennent ses prototypes.

Utilise une chaîne de caractères comme premier argument de setTimeOut() est en réalité un eval() caché, et donc son contenu est exécuté dans le contexte global. Il est plus utile de lui passer une fonction anonyme, qui sera alors exécutée dans le contexte local.

Code : Tout sélectionner

setTimeOut( function(){ fait_quelque_chose(42);}, 1000)
La seule utilité de typeof est de voir si une fonction à été déclarée ou pas. Pour déterminer le type d'un élément, Object.prototype.toString est bien plus utile et consistante.

Et bien plus encore sur la page originale.

Re: [javascript] Bonnes pratiques.

Posté : 14 mars 2011, 17:11
par xTG
Très... Très... Très intéressant ! :D

Re: [javascript] Bonnes pratiques.

Posté : 14 mars 2011, 18:07
par stealth35
Toujours utiliser JSLint, pour faire du code propre (avec Strict white space en bonus) :wink:

pour le reste pas de surprise tout est expliqué dans la doc :
for...in
https://developer.mozilla.org/fr/R%C3%A ... s/for...in

setTimeout :
https://developer.mozilla.org/fr/DOM/window.setTimeout

Re: [javascript] Bonnes pratiques.

Posté : 14 mars 2011, 23:30
par Berzemus
pour le reste pas de surprise tout est expliqué dans la doc :
for...in
https://developer.mozilla.org/fr/R%C3%A ... s/for...in
Tout de même étrange qu'ils ne mentionnent pas .hasOwnProperty() (la version anglaise de la doc bien, par contre).

Re: [javascript] Bonnes pratiques.

Posté : 14 mars 2011, 23:35
par stealth35
pour le reste pas de surprise tout est expliqué dans la doc :
for...in
https://developer.mozilla.org/fr/R%C3%A ... s/for...in
Tout de même étrange qu'ils ne mentionnent pas .hasOwnProperty() (la version anglaise de la doc bien, par contre).
ah oui, oublie de traduction surement

Re: [javascript] Bonnes pratiques.

Posté : 16 mars 2011, 10:41
par Nagol
J'espère que les types de Jquery liront ce genre de trucs :)

Re: [javascript] Bonnes pratiques.

Posté : 16 mars 2011, 12:01
par Berzemus
J'espère que les types de Jquery liront ce genre de trucs :)
Penses-tu, ils en sont encore au stade de se demander comment faire des recherches dans un tableau.

Re: [javascript] Bonnes pratiques.

Posté : 16 mars 2011, 12:59
par Nagol
J'espère que les types de Jquery liront ce genre de trucs :)
Penses-tu, ils en sont encore au stade de se demander comment faire des recherches dans un tableau.
Je pense effectivement, ainsi que de coder des trucs avec des variables globales, et des free, Jquery est en fait extremement mal codé, mais ca passe innaperçu tant les différents framework javascript sont généralement mal codés (extjs, prototype etc). Le meilleur que j'ai vu pour le moment c'est google le reste ne vaut même pas la peine d'être mentioné dans une proposition professionelle. je vais encore me faire rabattre les oreilles pour ce que je viens de dire, mais c'est pas grave au moins ca attirera l'oeil de gens qui vont chercher à comprendre pourquoi je dis ça et peut être que certains verront même de leur yeux que j'ai raison au lieu de croire dans les discours marketing et autre arguments du genre "tous le monde utilise ca doit pas être si mal" :)

Re: [javascript] Bonnes pratiques.

Posté : 06 avr. 2011, 08:30
par Stef
Utilise une chaîne de caractères comme premier argument de setTimeOut() est en réalité un eval() caché, et donc son contenu est exécuté dans le contexte global. Il est plus utile de lui passer une fonction anonyme, qui sera alors exécutée dans le contexte local.
Depuis que je me suis penché (pas trop hein! vais pas basculer dans le vide non plus...) sur la question j'utilise systématiquement des fonctions anonymes avec setTimeout.

http://jsbin.com/icena5

Re: [javascript] Bonnes pratiques.

Posté : 10 avr. 2011, 05:08
par devlop78

Utilise une chaîne de caractères comme premier argument de setTimeOut() est en réalité un eval() caché, et donc son contenu est exécuté dans le contexte global. Il est plus utile de lui passer une fonction anonyme, qui sera alors exécutée dans le contexte local.

Code : Tout sélectionner

setTimeOut( function(){ fait_quelque_chose(42);}, 1000)
Je n'ai pas lu le tuto, mais ça m'étonne quand même ... peut-être que
var mafonction = function () { }

setTimeout ( mafonction, 1000);
Serait mieux ... disons qu'en AS3, tiré aussi de ECMAScript, il n'y a pas de guillemet pour ce genre de chose. Les fonctions étant en quelque sorte des variables. Il n'y a qu'à voir la déclaration des méthodes dans une classe ... Mais il est tard et je n'ai pas assez de recul sur ce langage. Il faudrait surtout s'intéresser sur le mécanisme interne pour mieux comprendre, plutot de se contenter de dire qu'il s'agit d'un eval() ;)

Re: [javascript] Bonnes pratiques.

Posté : 10 avr. 2011, 21:25
par Berzemus
Je n'ai pas lu le tuto, mais ça m'étonne quand même ... peut-être que
C'est pas un tuto.

Et plutôt que de te pondre une réponse incendiaire (trop facile), je te conseille de le lire. Deux fois.

Re: [javascript] Bonnes pratiques.

Posté : 11 avr. 2011, 19:39
par devlop78
A non j'étais crevé lol. Effectivement, c'est bien écrit qu'il fait l'eval() pour la chaîne de caractères. Ca me rassure ;)