web-dev-qa-db-fra.com

Que doit savoir tout programmeur JavaScript?

Existe-t-il un ensemble de choses que tout programmeur JavaScript devrait savoir pour pouvoir dire "Je connais JavaScript"?

368
gath

Pas jQuery. Pas YUI. Non (etc. etc.)

Les frameworks peuvent être utiles, mais ils cachent souvent les détails parfois laids de la manière dont JavaScript et le DOM fonctionnent en réalité. Si votre objectif est de pouvoir dire "Je connais le JavaScript", alors investir beaucoup de temps dans un cadre s’oppose à cela.

Voici quelques fonctionnalités du langage JavaScript que vous devez savoir pour comprendre ce qu’il fait et ne pas vous faire prendre au dépourvu, mais qui ne sont pas immédiatement évidentes pour beaucoup de gens:

  • Que object.prop et object['prop'] sont identiques (vous pouvez donc arrêter d’utiliser eval, merci); les propriétés de l'objet sont toujours des chaînes (même pour les tableaux); ce que for...in est pour (et ce que ce n'est pas ).

  • Reniflage de propriété; ce que undefined est (et pourquoi ça sent ); pourquoi l'opérateur in apparemment peu connu est bénéfique et différent des contrôles typeof/undefined; hasOwnProperty; le but de delete.

  • Que le type de données Number est vraiment un float; les difficultés indépendantes de la langue de l'utilisation des flotteurs; évitant le parseInt piège octal.

  • Portée de la fonction imbriquée; la nécessité d'utiliser var dans le champ d'application que vous souhaitez éviter, par exemple, des éléments globaux accidentels; comment les portées peuvent être utilisées pour les fermetures; le problème de boucle de fermeture .

  • Comment les variables globales et les propriétés window se rencontrent; comment les variables globales et les éléments de document ne devraient pas entrer en collision, mais le font dans IE; la nécessité d'utiliser var dans une portée globale aussi pour éviter cela.

  • Comment la déclaration function agit en ‘ hisse ’ une définition avant le code qui la précède; la différence entre les instructions de fonction et les expressions de fonction; pourquoi les expressions de fonction nommées ne doivent pas être utilisées .

  • Le fonctionnement du constructeur, la propriété prototype et l'opérateur new fonctionnent réellement; méthodes d'exploiter cela pour créer le système normal de classe/sous-classe/instance que vous vouliez réellement; lorsque vous souhaitez utiliser des objets basés sur la fermeture plutôt que le prototypage. (La plupart des didacticiels de JS sont absolument terribles à ce sujet; il m'a fallu des années pour que tout soit clair dans mon esprit.)

  • Comment this est déterminé au moment de l'appel, et non lié; comment, en conséquence, la méthode ne fonctionne pas comme prév d’autres langues; comment les fermetures ou Function#bind peuvent être utilisés pour résoudre ce problème.

  • D'autres fonctionnalités d'ECMAScript Fifth Edition telles que indexOf, forEach et la programmation fonctionnelle méthodes sur Array ; comment réparer les anciens navigateurs pour vous assurer de pouvoir les utiliser; en les utilisant avec des expressions de fonction anonymes en ligne pour obtenir un code compact et lisible.

  • Le flux de contrôle entre le navigateur et le code utilisateur; exécution synchrone et asynchrone; les événements qui se déclenchent dans le flux de contrôle (par exemple, le focus) par rapport aux événements et aux délais d'attente qui se produisent lorsque le contrôle est rendu; comment appeler une fonction intégrée supposément synchrone comme alert peut entraîner une ré-entrée potentiellement désastreuse.

  • Comment les scripts entre fenêtres affectent instanceof; comment les scripts entre fenêtres affectent le flux de contrôle entre différents documents; comment postMessage corrigera, espérons-le.

Voir cette réponse en ce qui concerne les deux derniers éléments.

Surtout, vous devriez visionner JavaScript de manière critique, en reconnaissant qu'il s'agit d'un langage imparfait pour des raisons historiques (même plus que la plupart des autres langues) et en évitant ses pires problèmes. Les travaux de Crockford sur ce sujet méritent vraiment d'être lus (même si je ne suis pas tout à fait d'accord avec lui sur les "bonnes parties").

590
bobince

Que cela puisse être désactivé.

248
graphicdivine

Comprendre ce qui est écrit dans Crockford Javascript: les bonnes parties est une assez bonne hypothèse selon laquelle une personne est un bon programmeur JS.

Vous pouvez très bien savoir utiliser une bonne bibliothèque telle que JQuery sans toujours connaître les parties cachées de Javascript.

Une autre remarque concerne les outils de débogage sur différents navigateurs. Un programmeur JS doit savoir comment déboguer son code dans différents navigateurs.

Oh! Et savoir que JSLint va totalement blesser vos sentiments!

75
bron

Si vous voulez être un vrai ninja JavaScript, vous devez connaître les réponses à toutes les questions du La perfection tue le quiz JavaScript .

Un exemple pour vous mettre en appétit:

(function f(f){ 
  return typeof f(); 
})(function(){ return 1; });

Que retourne cette expression?

  • "nombre"
  • "indéfini"
  • "une fonction"
  • Erreur
49
Skilldrick

Vous ne connaissez pas JavaScript si vous ne connaissez pas:

  1. Fermetures
  2. Héritage basé sur un prototype
  3. Le modèle de module
  4. Le W3C-DOM
  5. Comment fonctionnent les événements
46
edwin

..que javascript n'est pas Java :)

Beaucoup, beaucoup de gens commençant par le développement de sites Web, m'ont dit que javascript était tout simplement Java!

37
Sripathi Krishnan
  1. Familiarisez-vous avec au moins une bibliothèque Javascript (Jquery, Prototype, etc.).

  2. Apprenez à utiliser les outils de débogage des principaux navigateurs (MSIE 7-8, Firefox, Chrome, Safari)

  3. En savoir plus sur l'industrie: le site Web de Douglas Crockford est un trésor alors qu'Ajaxian.com est un bon blog pour se tenir au courant de nouvelles idées intéressantes, ou bizarres pour Javascript. Il existe un certain nombre d'autres ressources, mais ce sont celles qui m'ont le plus aidé.

27
David

Javascript objets et fonction en tant que citoyen de première classe , callbacks , sans oublier les événements puis JQuery.

24
Sarfraz

Ce Javascript n'est pas quelque chose qui peut être appris en une heure!

24
Ashwin Prabhu

Les variables sont globales sauf si elles sont déclarées locales !!

Mauvais (DoSomething () n'est appelé que 10 fois):

function CountToTen()
{
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();

Bon (quelque chose () est appelé 50 fois comme prévu):

function CountToTen()
{
  var i;
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  var i;
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();
23
theycallmemorty
20
Daniel Vassallo

Pour savoir que JavaScript s'appelait à l'origine LiveScript et que le préfixe "Java" était associé à des fins de marketing, non pas parce que Java et Javascript sont liés (ce qui n'est pas le cas). .

Oh, et pour posséder n’importe quelle version de David Flanagan 'Javascript: Le Guide définitif' (ces informations se trouvent à la page 2).

... et d’avoir apprécié ceux qui ont déjà tenté d’obscurcir les documents.allers d'Internet Explorer 4 [] et Netscape Navigator 4 [] avant que Jquery ne soit soulagé.

EDIT:

Comme @Kinopiko le souligne, JavaScript s'appelait à l'origine projet Mocha ( certaines sources pense également qu'il s'appelait projet LiveWire), mais il est généralement admis que le langage (écrit par Brendan Eich) devait être publié en tant que LiveScript. avant que le préfixe Java ne soit adopté au début de 1996.

8
amelvin

Il faut savoir ce qui suit pour dire "Je connais JavaScript":

  1. JavaScript est bon mais DOM est le point douloureux
  2. Problèmes de navigateur peut vous rendre fou
  3. Sauf si le code est testé sur au moins 4 bons navigateurs différents vous ne pouvez pas dire que c'est sans bug
  4. Fermeture .............. Doit savoir
  5. Son basé sur un prototype ........... Nice, son plaisir d'apprendre
  6. débogueur mot clé ..... Aide en crise
8
Anil Namde

Ce JavaScript est beaucoup plus différent des autres langues que vous ne le pensez. Regardez cette conversation Google Tech pour vous faire une idée: http://www.youtube.com/watch?v=hQVTIJBZook

7
ericteubert

Qu'est-ce que tout codeur javascript devrait savoir?

Que diriez-vous, je peux désactiver vos efforts en 2 clics. Donc, prévoir une solution de repli si possible.

7
Khainestar

Je recommande fortement de lire Javascript: les bonnes parties

6
Sungguk Lim

Vous connaissez le javascript si vous pouvez utiliser efficacement les tableaux, les nombres, les chaînes, les dates et les objets. Des points plus pour Math et RegExp. Vous devriez être capable d’écrire des fonctions et d’utiliser des variables (dans la portée correcte, c’est-à-dire en tant que "méthodes" d’un objet).

Je vois des commentaires sur les fermetures, la syntaxe de fonction extravagante, blabla. Tout cela n'a aucune pertinence pour cette question. C'est comme dire que vous êtes un coureur si vous pouvez courir le 100 m en moins de 11 secondes.

Je dis qu'il faut peut-être quelques semaines pour maîtriser le javascript. Après cela, il faut des années et des dizaines de livres et des milliers de lignes de programmation pour devenir un expert, un ninja, etc.

Mais ce n'était pas la question.

Oh, et le DOM ne fait pas partie de javascript, pas plus que jQuery. Je pense donc que les deux sont également indifférents à la question.

6
4
Richard Inglis

Après avoir lu tout ce qui précède, il est également parfaitement bien d'apprendre le Javascript en utilisant un cadre tel que jQuery. La vérité est que c'est la première façon dont beaucoup de gens ont choisi JS. Pas de honte à ce sujet.

4
Soup

tablea .length méthode n'est pas un nombre d'éléments du tableau, mais l'indice le plus élevé. même lorsque l'élément était réglé sur undefined

var a = [];
a.length;   // === 0
a[10];      // === undefined
a[10] = undefined;
a.length;   // === 11
a.pop();    // === undefined
a.length;   // === 10

ce comportement se distingue à peine d'un bug de conception de langage.

4
mykhal

jQuery serait ma meilleure recommandation. Non seulement pour le code lui-même, mais pour le langage, le style, la pensée qui le sous-tend, qui mérite le plus d'être imité.

3
duffymo

Apprendre une langue vraiment bien et comprendre ses diverses bizarreries vient d’expérience (années). Si vous voulez être un meilleur programmeur, je dirais, comprendre les modèles de conception, comment et quand les utiliser et/ou même quand vous les utilisez sans vous en rendre compte; architecture technique et expérience utilisateur.

Connaître le langage (JavaScript) signifie que vous pouvez choisir n’importe quel framework et l’utiliser à volonté. Vous aurez inévitablement besoin de plonger dans le code source, et si vous ne connaissez que la syntaxe d'un framework, ou 2 ou 3, alors vous n'irez pas loin. En disant cela, entrer dans le code source de quelques frameworks différents est probablement l'un des meilleurs moyens de voir comment JavaScript peut être utilisé. Essayez de parcourir le code dans Firebug ou Web Inspector, puis consultez la documentation JavaScript, en particulier les documents Mozilla et Webkit, pour mieux comprendre ce que vous regardez.

Comprenant la différence entre la programmation orientée objet et la programmation fonctionnelle, JavaScript est un mélange sexy des deux. Quand et comment l'utiliser pour créer une base de code époustouflante et des applications géniales, vous deviendrez un meilleur programmeur JavaScript.

Il suffit de lire quelques livres, en particulier les "bonnes parties" de Crockford qui ne font que présenter ses opinions sur ce qui est bon en JavaScript, tout en sautant la plupart des IMPRESSIONNANTES de JavaScript qui vous mèneront du mauvais pied.

L'extraction de code écrit par quelqu'un comme Thomas Fuchs, en revanche, vous donnera plus d'informations sur la puissance de l'écriture d'un code JavaScript étonnant et efficace.

Essayer de mémoriser quelques pièges ou WTF ne vous aidera pas beaucoup non plus, vous le remarquerez si vous commencez à coder et à parcourir le code d'une bibliothèque/frameworks, en particulier un code bien commenté, pour voir pourquoi ils ont utilisé certains propriétés/valeurs et pas d'autres pourquoi et quand il est bon d'utiliser des opérandes et des opérateurs spécifiques, tout est là dans le code des utilisateurs du framework. Comment mieux que d'apprendre par l'exemple? : ^)

3

Ce javascript est la langue la plus largement déployée dans le monde. (Probablement)

3
zaf

En Javascript, la performance compte.

Il n’existe pas de compilateur intelligent pour optimiser votre code, vous devez donc être plus prudent lorsque vous écrivez du code javascript que des langages tels que C #, Java ...

2
mcaaltuntas

les littéraux d'objet parce qu'ils sont si agréables à écrire.

1
poo

Les choses suivantes sont également importantes:

1) levage variable. 2) Chaînes d'étendue et objets d'activation.

et puis des choses comme celles-ci: :)

3) wtfjs.com

4) tout est un objet http://www.lifeinafolder.com/images/Js.jpg

0
Rajat
  1. Sachant qu'il y a une vie avec et sans with() et où tracer la ligne.
  2. Vous pouvez créer des erreurs personnalisées avec l'instruction throw pour arrêter volontairement l'exécution de javascript.
0
FK82