Que doit savoir tout programmeur JavaScript? [fermé]


368

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

Réponses:


590

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

Les cadres peuvent être utiles, mais ils cachent souvent les détails parfois laids de la façon dont JavaScript et le DOM fonctionnent réellement chez vous. Si votre objectif est de pouvoir dire «je connais JavaScript», investir beaucoup de temps dans un framework s'oppose à cela.

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

  • Ce object.propet object['prop']sont la même chose (donc pouvez - vous cesser d' utiliser eval, merci); que les propriétés des objets sont toujours des chaînes (même pour les tableaux); ce que for... inest pour (et ce n'est pas ).

  • Reniflement de propriété; ce qui undefinedest (et pourquoi ça sent ); pourquoi l' inopérateur apparemment peu connu est bénéfique et différent de typeof/ undefinedchecks; hasOwnProperty; le but de delete.

  • Que le Numbertype de données est vraiment un flottant; les difficultés indépendantes de la langue d'utilisation des flotteurs; éviter le parseIntpiège octal.

  • Portée de la fonction imbriquée; la nécessité d'utiliser vardans la portée que vous souhaitez éviter les globales accidentelles; comment les portées peuvent être utilisées pour les fermetures; le problème de la boucle de fermeture .

  • Comment les variables et les windowpropriétés globales entrent en collision; comment les variables globales et les éléments de document ne doivent pas entrer en collision mais le faire dans IE; la nécessité d'utiliser également varà l'échelle mondiale pour éviter cela.

  • Comment l' functionénoncé agit pour « hisser » une définition avant le code qui la précède; la différence entre les énoncés de fonction et les expressions de fonction; pourquoi les expressions de fonction nommées ne doivent pas être utilisées .

  • Fonctionnement réel du constructeur, prototypepropriété et newopérateur les méthodes d'exploitation pour créer le système de classe / sous-classe / instance normal que vous vouliez réellement; lorsque vous souhaiterez peut-être utiliser des objets basés sur la fermeture au lieu du prototypage. (La plupart des didacticiels JS sont absolument terribles à ce sujet; il m'a fallu des années pour les comprendre directement.)

  • Comment thisest déterminé au moment de l'appel, non lié; comment, par conséquent, le passage de méthode ne fonctionne pas comme vous l'attendez d'autres langues; comment les fermetures ou Function#bindpeuvent être utilisées pour contourner cela.

  • D'autres fonctionnalités ECMAScript Fifth Edition comme indexOf, forEachet les méthodes deArray programmation fonctionnelle sur ; comment réparer les anciens navigateurs pour vous assurer que vous pouvez les utiliser; les utiliser 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 à l'intérieur du flux de contrôle (par exemple, la mise au point) par rapport aux événements et délais d'expiration qui se produisent lorsque le contrôle revient; comment appeler un buildin soi-disant synchrone alertpeut finir par provoquer une rentrée potentiellement désastreuse.

  • Comment les scripts inter-fenêtres affectent instanceof; comment les scripts inter-fenêtres affectent le flux de contrôle à travers différents documents; comment, postMessageje l'espère, résoudre ce problème.

Voir cette réponse concernant les deux derniers éléments.

Surtout, vous devriez regarder JavaScript de manière critique, en reconnaissant qu'il s'agit pour des raisons historiques d'un langage imparfait (encore plus que la plupart des langues), et en évitant ses pires problèmes. Le travail de Crockford sur ce front vaut vraiment la peine d'être lu (bien que je ne sois pas d'accord à 100% avec lui sur les «bonnes parties»).


80
Ahhhh, enfin une réponse réfléchie et approfondie. Si je pouvais +10, je le ferais. Connaître un cadre ne signifie pas que vous pouvez programmer JavaScript efficacement.
Tim Down du

6
Merci beaucoup pour cette réponse bien pensée. Je voudrais ajouter que l'utilisation d'un cadre peut être vraiment bénéfique si vous savez comment cela se fait. Vous devez apprendre à faire ces choses par vous-même avant de recourir à un cadre.
Javier Parra

4
@Daniel: en fait pas le cas, thisest lié quelle que soit la façon dont vous y accédez. Essayez-le:, var o= {b: function(){alert(this===o);}};puis o['b']();-> true. Et si vous voulez vraiment bizarre, (o['b'])()-> true, mais (c= o['b'])()-> false, et dans Mozilla uniquement, (true? o['b'] : null)()-> true. W, T, et en effet F.
bobince

7
Quel pot! Ce n'est pas comme si connaître toutes les bizarreries du navigateur faisait de vous un meilleur codeur JS. Peut-être plus de crédibilité dans la rue parmi vos pairs ... Les abstractions facilitent la vie et sont une partie essentielle de JS, donc je dirais que connaître un cadre fait de vous un meilleur codeur JS que celui qui ne le fait pas et veut faire les choses à long terme.
Vince Panuccio

19
Sir Psycho: notez qu'aucune de ces réponses ne mentionne le DOM, c'est ce que les grandes bibliothèques sont là pour vous aider. Un cadre ne peut vous protéger contre aucune des choses mentionnées ici . Ce truc est important pour quiconque fait des scripts de navigateur, utilisant ou non un framework.
Tim Down du

248

Qu'il peut être désactivé.


12
+1, je suis tellement fatigué des pages qui ne se soucient même pas des principes de base de la dégradation gracieuse car "c'est tellement difficile et tout le monde a activé javascript de toute façon".
wasatz

27
+1. Une page qui ne fonctionne pas sans JavaScript est une page qui sera fragile même avec JS activé.
bobince

9
@iconiK Je vais simplement dire à toutes mes clientèles gouvernementales qui ont désactivé JavaScript dans le monde entier pour des raisons de sécurité qu'elles sont toutes idiotes, n'est-ce pas?
graphicdivine

16
-1 ceci est hors sujet et n'a vraiment rien à voir avec le javascript en tant que langue. C'est une bonne chose à considérer lors de la conception d'une application Web, mais ce n'est toujours pas une réponse qui appartient à ce fil.
TM.

24
@TM, non, c'est vraiment une considération importante. Cela devrait être au premier plan de votre esprit lorsque vous testez des valeurs avant de les insérer dans la base de données ou que vous avez le seul moyen de vous connecter à votre site Web via une boîte de dialogue javascript fantaisie. En parlant de ça ... Je pense que je dois aller vérifier quelque chose.
Elizabeth Buckwalter

75

Comprendre les choses écrites dans le Javascript de Crockford : The Good Parts est une assez bonne hypothèse qu'une personne est un programmeur JS décent.

Vous pouvez à peu près savoir comment utiliser une bonne bibliothèque comme JQuery et ne pas connaître les parties cachées de Javascript.

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

Oh! Et savoir que JSLint nuira totalement à vos sentiments !!


+1 N'oubliez pas ce livre, excellente recommandation.
David

8
Il y a aussi beaucoup de vidéos instructives et perspicaces sur Crockford sur developer.yahoo.com/yui/theater - et je pense que je n'ai pas besoin de mentionner crockfordfacts.com :-)
ndim

+1 - JSLint est une chose merveilleuse lorsque vous essayez de développer JS pour un framework qui ne supporte aucun débogage intégré ( cough Siebel, cough PDFs).
J.Polfer

49

Si vous voulez être un véritable ninja JavaScript, vous devez connaître les réponses à toutes les questions du Quiz JavaScript Perfection kills .

Un exemple pour vous mettre en appétit:

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

Que renvoie cette expression?

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

10
Jetez un œil à mes réponses: codingspot.com/2010/02/…
CMS

@CMS Très bien! Avez-vous vraiment bien compris la première fois, ou cela inclut-il des recherches?
Skilldrick

7
Skilldrick: Je pense que je les ai tous eu la première fois, je suis un lecteur fréquent de la norme ECMA-262 (je sais, je suis un monstre :-)
CMS

46

Vous ne connaissez pas JavaScript si vous ne savez pas:

  1. Fermetures
  2. Héritage basé sur un prototype
  3. Le modèle de module
  4. Le W3C-DOM
  5. Fonctionnement des événements

J'aime vraiment cette réponse. Il vous aide à repérer les zones sombres dans vos connaissances. Les événements sont la seule chose encore un peu obscure pour moi dans cette liste de contrôle (si le modèle de module signifie "ne pas encombrer l'espace de noms global" et inclut donc les étendues et l'opérateur var).
silviot

11
Je dirais cela You don't know JavaScript if you don't know The W3C-DOM. Les deux choses sont différentes.
gblazex

37

..que javascript n'est pas java :)

Beaucoup, beaucoup de gens commençant par le développement de sites Web m'ont dit que javascript est simplement du java simple!


+1 Ce point est assez fondamental!
amelvin

71
"JavaScript est à Java comme le tapis à la voiture."
Josh Lee

1
Javascript est à peu près aussi similaire à Java que C # est similaire à C. Bien sûr, la syntaxe semble un peu similaire, mais très différente.
Earlz

4
à moins qu'ils n'utilisent Google Web Toolkit
Afriza N. Arief

Fait intéressant, Microsoft a basé les fonctions de date conformes à l'an 2000 dans JScript pour IE3 sur java.util.Date.
Bayard Randel

27
  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. Renseignez-vous sur l'industrie: le site Web de Douglas Crockford est un trésor tandis que Ajaxian.com est un bon blog pour suivre les idées nouvelles, intéressantes et ou étranges pour Javascript. Il existe un certain nombre d'autres ressources, mais ce sont celles qui m'ont le plus aidé.


Sérieusement, pourquoi le vote négatif?
David

+1 Trop de votes tactiques, sérieusement, les gens devraient simplement voter en faveur des bonnes réponses et non pas simplement essayer de mettre leur réponse au sommet.
amelvin

1
@Murali VP J'ai fait l'hypothèse de "connaître" Javascript dans le contexte des navigateurs. Juste après un équivalent de hello world, vous devrez trouver vos erreurs logiques et d'exécution, qui peuvent être différentes par interprète. Je ne prétendrais pas connaître une langue si je ne savais pas comment la déboguer. Quant à une exigence de cadre, Javascript est un peu comme le début du C, où de subtiles différences d'implémentation saboteront les imprudents; jQuery et prototypejs ignorent ces différences et font de Javascript un outil fiable tout en ajoutant des appels API supplémentaires pour augmenter la productivité. (suite)
David

@Murali VP Pour être juste, Javascript a parcouru un long chemin depuis que j'ai commencé à l'utiliser dans les années 90 et à l'exception de Microsoft, les autres interprètes Javascript ont fait un travail impressionnant pour obéir aux spécifications et jouer équitablement.
David

@ David merci pour la belle explication. Ont tendance à être d'accord avec vous.
Murali VP

24

Les objets Javascript fonctionnent comme des citoyens de première classe , des rappels , sans oublier les événements puis JQuery .


20
Ah jQuery, le framework JS sur-typé!
Murali VP


23

Les variables sont globales sauf si 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 (DoSomething () 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();

2
Je n'avais même jamais pensé à ça. Très bon point.
olive

6
J'essaie de prendre l'habitude de for (var i=0;dans toutes mes boucles
ghoppe

2
Crockford préfère placer le varen haut de la fonction, car cela ne vous trompe pas sur la taille de la portée de la variable. js2-modese plaindra si vous avez var ideux forboucles distinctes dans la même fonction, car cela suggère que vous pensez que vous avez deux variables distinctes, et vous n'en avez pas. Néanmoins, j'essaie de ne jamais varséparer les choses de l'endroit où je les initialise.
Kragen Javier Sitaker

Je m'en fiche si ce n'est pas couvert. Je ne peux pas supporter d'avoir une variable déclarée 20 lignes avant qu'elle ne soit utilisée
Juan Mendes


8

Pour savoir que Javascript s'appelait à l'origine LiveScript et que le préfixe «Java» était attaché à des fins marketing, non pas parce que Java et Javascript sont liés (ce qu'ils ne sont pas).

Oh et pour posséder n'importe quelle version de 'Javascript: The Definitive Guide' de David Flanagan (cette information est à la page 2).

... et d'avoir apprécié ceux qui l'ont précédé en essayant de brouiller document.all [] d'Internet Explorer 4 et les document.layers [] de Netscape Navigator 4 avant que Jquery ne retire la douleur.

ÉDITER:

Comme @Kinopiko le souligne, JavaScript a été appelé à l'origine le projet Mocha ( certaines sources pensent également qu'il s'appelait le projet LiveWire), mais il est généralement admis que le langage (écrit par Brendan Eich) devait être publié en tant que LiveScript avant l'adoption du préfixe Java. sortie début 1996.


+1 pour avoir choisi les mésanges de Douglas Crockford!
gath

1
Je pensais que JavaScript s'appelait à l'origine Mocha?

1
@Kinopiko Selon mon livre «Javascript: The Definitive Guide» 3ed (juin 1998) de David Flanaghan, il s'appelait LiveScript.
amelvin

@gath Un jour où vous apprenez quelque chose est une bonne journée!
amelvin

1
@amelvin Chaque jour est une journée d'école.
Colonel Sponsz

8

Il faut être conscient de ce qui suit pour dire "Je connais JavaScript":

  1. JavaScript est bon mais DOM est un point douloureux
  2. Les problèmes de navigateur croisés peuvent vous rendre fou
  3. Sauf si le code est testé sur au moins 4 bons navigateurs différents, vous ne pouvez pas dire que son bug est gratuit
  4. Fermeture .............. À savoir
  5. Son prototype basé sur ........... Nice celui son plaisir d'apprendre cela
  6. mot-clé du débogueur ..... Aide en cas de crise

Belle liste, assez mince. Je me suis moqué des "4" bons navigateurs. :) Je pense que le numéro 7 devrait être une haine saine pour les navigateurs IE sous la version 8.
Shyam

@Shyam, qu'est-ce qui vous fait penser que nous ne devrions pas avoir une haine saine d'IE8? J'ai encore des problèmes dans IE8 ... des problèmes qui ne sont que dans IE8.
Tracker1

@ Tracker1: Il y aura toujours des problèmes. Et dénigrer un navigateur que je n'ai pas touché, eh bien, ce serait un peu injuste. C'est pourquoi j'ai ri de 4 bons navigateurs: 'Firefox, Chrome, Safari et Opera' sont les seuls pour lesquels je développe. J'ai arrêté le piratage pour IE, je le fais juste exécuter le code Fisher Price, comme si JavaScript était désactivé.
Shyam

7

Ce JavaScript est beaucoup plus différent que les autres langages que vous ne le pensez. Regardez cet excellent Google Tech Talk pour vous faire une idée: http://www.youtube.com/watch?v=hQVTIJBZook


1
+1 Ceci est une excellente explication de la façon d'arrêter la succion JavaScript. Cela vaut la peine d'être regardé après: yuiblog.com/crockford
Colonel Sponsz

Une autre bonne présentation de Crockfod ("Le langage de programmation JavaScript" en 4 parties) video.yahoo.com/watch/111593/1710507
Alex K.

7

Que doit savoir tout codeur javascript?

Que diriez-vous, je peux désactiver vos efforts en 2 clics. Prévoyez donc un repli si possible.


Vous pourriez aussi bien désinstaller votre navigateur Web. Il y a très peu de gens qui désactivent javascript ces jours-ci. Ceux qui n'ont probablement pas besoin de naviguer sur le Web. La seule exception à cela est que les robots d'indexation doivent accéder à votre contenu public et ne peuvent pas compter sur JS pour le faire.
Jean Vincent

Je suis plus intéressé à fournir des moyens non JS d'accéder aux choses. Je connais des gens qui naviguent avec JS désactivé ou utilisent des lecteurs d'écran. Ils ne jouent pas toujours bien avec JS. J'ai vu des sites sur lesquels une simple page de connexion est soumise via ajax sans aucun recours. Pas de JS, pas de connexion. Le site n'utilise même pas beaucoup de JS, juste pour soumettre des formulaires.
Khainestar

Je crois que les utilisateurs qui désactivent intentionnellement JS comme vous l'avez laissé entendre sont très rares aujourd'hui, certainement beaucoup moins qu'il y a 10 ans. C'est pourquoi je ne comprends pas pourquoi nous devrions concevoir un site deux fois pour les personnes qui ne veulent tout simplement pas vraiment visiter votre site de toute façon. Donc, dans votre exemple, ils ne peuvent pas se connecter, alors quoi? L'autre chose est qu'il n'y a absolument aucun moyen de concevoir un site moderne sans JS.
Jean Vincent


6

Vous connaissez javascript si vous pouvez utiliser efficacement Array, Number, String, Date et Object. Points positifs pour Math et RegExp. Vous devriez être capable d'écrire des fonctions et d'utiliser des variables (dans une portée correcte, c'est-à-dire en tant que «méthodes» d'un objet).

Je vois quelques commentaires sur la connaissance des fermetures, la syntaxe de fonction extravagante, blabla. Tout cela est tout à fait hors de propos pour cette question. C'est comme dire que vous êtes un coureur si vous pouvez courir le 100m en moins de 11 secondes.

Je dis qu'il faut peut-être quelques semaines pour devenir compétent en 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, et jQuery non plus. Je pense donc que les deux sont également sans rapport avec la question.


1
La fermeture est là, que vous en preniez soin ou non. Il est puissant mais peut facilement être utilisé à mauvais escient. Vous ne connaissez pas la langue si vous ne savez pas comment cela fonctionne.
gblazex

Hormis les fermetures de méfaits pouvant provoquer, comme des fuites de mémoire, notamment chez notre véritable ami Internet Explorer 6.
Marcel Korpel


4

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


4

tableau . lengthLa méthode n'est pas un nombre d'éléments du tableau, mais l'indice le plus élevé. même lorsque l'élément a été défini surundefined

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 bogue de conception de langage.


3

jQuery serait ma meilleure recommandation. Pas seulement pour le code lui-même, c'est l'idiome, le style, la pensée derrière cela qui mérite le plus d'être émulé.


2
+1 Jquery a révolutionné mon utilisation du javascript.
amelvin

1
Bon argumentaire. L'expansion en ferait une excellente réponse.
Donal Fellows

jQuery vous force dans un mode procédural. Je préfère de loin écrire OO JS
Juan Mendes

L'orientation objet n'a rien de magique. Je préfère utiliser un framework conçu par John Resig et utilisé par des milliers d'autres développeurs que tout ce que vous ou moi écririons, quel que soit le mode.
duffymo

3

Ce javascript est la langue la plus déployée au monde. (Probablement)


8
La langue naturelle native la plus largement déployée est le mandarin. Est-ce que le fait de savoir cela fait de vous un locuteur mandarin? La connaissance de ce fait aurait-elle même quelque chose à voir avec votre compréhension de la langue?
Zano

11
Le langage le plus largement déployé dans le monde est le code génétique de l'ADN qui contrôle la synthèse des protéines au sein des cellules.
Ernelli

Avant le mandarin et l'ADN, le langage de l'Amour doit d'abord être déployé: ainsi, il gagne. BAM!
Christopher

3

Apprendre une langue vraiment bien et comprendre ses différentes bizarreries vient de (années d'expérience). 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 devrez inévitablement plonger dans le code source, et si tout ce que vous savez est 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é. Jouez en parcourant le code dans Firebug ou Web Inspector, puis en vérifiant la documentation JavaScript, en particulier les documents Mozilla et Webkit, pour mieux comprendre ce que vous regardez.

Comprendre la différence entre la programmation orientée objet et la programmation fonctionnelle, que JavaScript est un mélange sexy des deux et quand et comment les utiliser pour créer une base de code tueur et des applications impressionnantes feront de vous un meilleur programmeur JavaScript.

Il suffit de lire certains livres, en particulier les "bonnes parties" de Crockford qui présentent simplement ses opinions sur ce qui est bon en JavaScript, tout en sautant la plupart des parties IMPRESSIONNANTES de JavaScript va vous mettre du mauvais pied.

Vérifier le code écrit par quelqu'un comme Thomas Fuchs, d'autre part, vous donnera beaucoup plus d'informations sur le pouvoir d'écrire du JavaScript incroyable et efficace.

Essayer de mémoriser quelques gotchas ou WTF ne va pas beaucoup aider non plus, vous le comprendrez si vous commencez à coder et à parcourir un code de bibliothèque / frameworks, en particulier un code utile, 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 cela est là dans le code d'utilisation du framework. Quoi de mieux que d'apprendre par l'exemple? : ^)


+1 pour ne pas adorer Crockford. Je traite ses opinions comme je fais un prédicateur à l'église. Je respecte ce qu'ils disent mais prenez le tout avec un grain de sel.
Juan Mendes

2

En Javascript, la performance compte.

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


1
En fait, les compilateurs de navigateur sont très bons pour optimiser votre code.
Eduardo

1
Chrome est très intelligent pour optimiser votre code, cette réponse n'est tout simplement pas vraie avec tous les nouveaux moteurs JS
Juan Mendes

Et IE, les navigateurs mobiles?
caltuntas

1

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



0
  1. Savoir 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' throwinstruction pour arrêter volontairement le runtime javascript.

-1

JavaScript ne prend pas en charge la séparation du mot-clé de retour et de l'instruction de retour avec un caractère de nouvelle ligne comme le code suivant (ou essayez-le sur ma page jsFiddle )

function foo()
{
    return
    {
        bar: 'something'
    };
}

$(function()
{
    document.write(foo());
});

Je ne comprends pas pourquoi JavaScript ne prend pas en charge ce style car il est beaucoup plus facile de lire du code source JavaScript très complexe par rapport au style par défaut de JavaScript.

PS. J'ai écrit JavaScript presque 6 ans. Mais je viens de trouver ce bogue avec moi-même lorsque j'essaie d'exécuter la fonction suivante. Il renvoie toujours indéfini. Lorsque j'utilise le débogueur et que j'entre dans cette fonction, tout fonctionne bien. Je pense que ce devrait être le pire bug de programmation de ma vie.

function JqGridInlineEditor_GenerateTool(cellvalue, options, rowObject, disableEdit, disableDelete)
{
    return 
        (!disableEdit ? '<a class="button edit" href="javascript: void(0);" onclick="JqGridInlineEditor_EditRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Edit.gif'), 'Click here to Edit or \nDouble-click row to edit.') : '') +
        (!disableDelete ? '<a class="button delete" href="javascript: void(0);" onclick="JqGridInlineEditor_DeleteRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Delete.png'), 'Click here to Delete or \nSelect row and then press Delete') : '') +
        (!disableEdit ? '<a class="button save" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_SaveRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Save.png'), 'Click here to Save or \nPress Enter') : '') +
        (!disableEdit ? '<a class="button cancel" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_RestoreRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Cancel.png'), 'Click here to Cancel or \nPress Esc') : '');
}

3
En JavaScript, les caractères de nouvelle ligne agissent généralement comme des séparateurs d'instructions; ce n'est que lorsqu'il est impossible qu'une instruction soit terminée (par exemple, var foo = "bar" +) l'analyseur continue de lire.
Marcel Korpel


2
@Marcel - Ce n'est pas exactement vrai; par exemple, les deux lignes var foo = 5et -1;entraîneront la définition de foo sur 4, même si chacune est une instruction valide en elle-même.
Ben Blank

4
En effet, le langage injecte automatiquement des points-virgules dans des instructions distinctes. Ceci est un gotcha avec la langue. Votre déclaration de retour est convertie en ceci: retour; {key: value,} Pour éviter ce problème, vous devriez adopter la pratique de placer les points-virgules sur la même ligne, comme ceci: return {key: value}; Rendez-vous également service et prenez une copie de Douglas Crockford: The Good Parts. Ceci est clairement mentionné dans le livre.
Rajat

@Ben - Cas intéressant, merci de l'avoir signalé. Cela dit, je recommanderais de ne pas compter sur ces cas marginaux et de tout mettre sur une seule ligne se terminant par un point-virgule et de ne mettre votre code sur plusieurs lignes que lorsqu'une ligne se termine par quelque chose qu'une instruction ou une expression ne peut tout simplement pas se terminer par .
Marcel Korpel

-3

Étant donné que JS est un langage fonctionnel, un programmeur JS décent doit être capable d'écrire Y-combinator et d'expliquer comment cela fonctionne au départ.


1
Qu'y a-t-il de mal à pouvoir écrire des combinateurs Y? Et oui javascript est un langage fonctionnel. Si vous voulez dire que vous connaissez "javascript", une bonne compréhension de la programmation fonctionnelle est nécessaire.
Raynos

C peut également être utilisé comme langage fonctionnel.
kzh

J'ai lu récemment sur le combinateur Y, je comprends comment il fonctionne et dans quels cas il pourrait être utilisé ... mais je n'ai jamais trouvé d'instance où je ne pouvais pas réécrire un problème pour ne pas avoir besoin du combinateur Y.
Evert

-5

... à propos de Google Web Toolkit , ce qui signifie que votre projet javascript pourrait probablement être développé de manière beaucoup plus pratique.


2
GWT n'est pas vraiment JavaScript, c'est la manière Javaish d'écrire JavaScript.
Livingston Samuel

... et chaque programmeur Javascipt devrait le savoir.
Viktor Sehr

que votre projet javascript pourrait probablement être développé de manière beaucoup plus pratique.
Viktor Sehr

6
Je pense que Javascript est plus facile à gérer que Java, personnellement.
timw4mail
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.