Existe-t-il un ensemble de choses que tout programmeur JavaScript devrait savoir pour pouvoir dire "Je connais JavaScript"?
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").
Que cela puisse être désactivé.
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!
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
Vous ne connaissez pas JavaScript si vous ne connaissez pas:
..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!
Familiarisez-vous avec au moins une bibliothèque Javascript (Jquery, Prototype, etc.).
Apprenez à utiliser les outils de débogage des principaux navigateurs (MSIE 7-8, Firefox, Chrome, Safari)
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é.
Javascript objets et fonction en tant que citoyen de première classe , callbacks , sans oublier les événements puis JQuery.
Ce Javascript n'est pas quelque chose qui peut être appris en une heure!
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();
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.
Il faut savoir ce qui suit pour dire "Je connais JavaScript":
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
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.
Je recommande fortement de lire Javascript: les bonnes parties
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.
JSLint http://www.JSLint.com/
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.
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.
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é.
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? : ^)
Ce javascript est la langue la plus largement déployée dans le monde. (Probablement)
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 ...
les littéraux d'objet parce qu'ils sont si agréables à écrire.
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
with()
et où tracer la ligne.throw
pour arrêter volontairement l'exécution de javascript.