Was sollte jeder JavaScript-Programmierer wissen? [geschlossen]


368

Gibt es eine Reihe von Dingen, die jeder JavaScript-Programmierer wissen sollte, um "Ich kenne JavaScript" sagen zu können?

Antworten:


590

Nicht jQuery. Nicht YUI. Nicht (usw. usw.)

Frameworks mögen nützlich sein, aber sie verbergen oft die manchmal hässlichen Details, wie JavaScript und das DOM tatsächlich vor Ihnen funktionieren. Wenn Sie in der Lage sein möchten, "Ich kenne JavaScript" zu sagen, ist es dagegen, viel Zeit in ein Framework zu investieren.

Hier sind einige JavaScript-Sprachfunktionen, die Sie kennen sollten, um zu verstehen, was sie tun, und die nicht auffallen, die aber für viele Menschen nicht sofort offensichtlich sind:

  • Das object.propund object['prop']sind das Gleiche (können Sie bitte aufhören zu verwenden eval, danke); Diese Objekteigenschaften sind immer Zeichenfolgen (auch für Arrays). wofür for... inist (und was nicht ).

  • Immobilienschnüffeln; was undefinedist (und warum riecht es ); warum der scheinbar wenig bekannte inBediener nützlich ist und sich von typeof/ undefinedprüft; hasOwnProperty;; der Zweck von delete.

  • Dass der NumberDatentyp wirklich ein Float ist; die sprachunabhängigen Schwierigkeiten bei der Verwendung von Floats; Vermeidung der parseIntOktalfalle.

  • Scoping für verschachtelte Funktionen; die Notwendigkeit, varin dem Bereich zu verwenden, in dem Sie versehentliche Globals vermeiden möchten; wie Zielfernrohre für Verschlüsse verwendet werden können; das Problem der Verschlussschleife .

  • Wie globale Variablen und windowEigenschaften kollidieren; wie globale Variablen und Dokumentelemente nicht kollidieren sollten, sondern im IE; die Notwendigkeit, auch varim globalen Bereich zu verwenden, um dies zu vermeiden.

  • Wie sich die functionAnweisung verhält , um eine Definition vor dem vorhergehenden Code zu " heben "; der Unterschied zwischen Funktionsanweisungen und Funktionsausdrücken; warum benannte Funktionsausdrücke nicht verwendet werden sollten .

  • Wie der Konstruktor funktioniert, funktionieren die prototypeEigenschaft und der newOperator wirklich. Methoden , um dies auszunutzen, um das normale Klassen- / Unterklassen- / Instanzsystem zu erstellen, das Sie tatsächlich wollten; wenn Sie möglicherweise schließungsbasierte Objekte anstelle von Prototypen verwenden möchten. (Das meiste JS-Tutorial-Material ist absolut schrecklich. Ich habe Jahre gebraucht, um es klar in meinen Kopf zu bekommen.)

  • Wie thiswird zur Anrufzeit bestimmt, nicht gebunden; wie folglich das Übergeben von Methoden nicht so funktioniert, wie Sie es von anderen Sprachen erwarten ; wie Verschlüsse oder Function#bindverwendet werden können, um das zu umgehen.

  • Andere ECMAScript Fifth Edition Features wie indexOf, forEachund die funktionale Programmierung Methoden aufArray ; wie man ältere Browser repariert, um sicherzustellen, dass man sie verwenden kann; Verwenden Sie sie mit anonymen Inline-Funktionsausdrücken, um kompakten, lesbaren Code zu erhalten.

  • Der Kontrollfluss zwischen Browser und Benutzercode; synchrone und asynchrone Ausführung; Ereignisse, die innerhalb des Kontrollflusses ausgelöst werden (z. B. Fokus), im Vergleich zu Ereignissen und Zeitüberschreitungen, die auftreten, wenn die Kontrolle zurückkehrt; Wie das Aufrufen eines vermeintlich synchronen eingebauten Geräts alertzu einem potenziell katastrophalen Wiedereintritt führen kann.

  • Wie sich fensterübergreifende Skripte auswirken instanceof; Wie wirkt sich fensterübergreifendes Scripting auf den Kontrollfluss zwischen verschiedenen Dokumenten aus? wie postMessagewird das hoffentlich behoben.

Siehe diese Antwort zu den letzten beiden Punkten.

Vor allem sollten Sie JavaScript kritisch betrachten, anerkennen, dass es aus historischen Gründen eine unvollständige Sprache ist (sogar mehr als die meisten anderen Sprachen), und die schlimmsten Probleme vermeiden. Crockfords Arbeit an dieser Front ist definitiv lesenswert (obwohl ich ihm nicht zu 100% zustimme, was die „guten Teile“ sind).


80
Ahhhh, endlich eine nachdenkliche, gründliche Antwort. Wenn ich +10 könnte, würde ich. Wenn Sie ein Framework kennen, können Sie JavaScript nicht effektiv programmieren.
Tim Down

6
Vielen Dank für diese gut durchdachte Antwort. Ich möchte hinzufügen, dass die Verwendung eines Frameworks sehr nützlich sein kann, wenn Sie wissen, wie es gemacht wird. Sie sollten lernen, diese Dinge selbst zu tun, bevor Sie auf ein Framework zurückgreifen.
Javier Parra

4
@ Daniel: Eigentlich nicht so, thisist gebunden, egal wie Sie darauf zugreifen. Probieren Sie es aus:, var o= {b: function(){alert(this===o);}};dann o['b']();-> true. Und wenn Sie wirklich ausgeflippt sein wollen , (o['b'])()-> true, aber (c= o['b'])()-> falseund nur in Mozilla, (true? o['b'] : null)()-> true. W, T und in der Tat F.
Bobince

7
Was für ein Topf! Es ist nicht so, dass Sie ein besserer JS-Codierer sind, wenn Sie die verschiedenen Browser-Macken kennen. Vielleicht mehr Street Cred unter Ihren Kollegen ... Abstraktionen erleichtern das Leben und sind ein wesentlicher Bestandteil von JS. Ich würde also sagen, dass das Wissen um ein Framework Sie zu einem besseren JS-Codierer macht als einer, der dies nicht tut und die Dinge auf lange Sicht tun möchte.
Vince Panuccio

19
Sir Psycho: Beachten Sie, dass in keiner dieser Antworten das DOM erwähnt wird. Die großen Bibliotheken helfen Ihnen dabei. Ein Framework kann Sie nicht vor den hier genannten Dingen schützen . Dieses Zeug ist wichtig für alle, die Browser-Skripte erstellen, ein Framework verwenden oder nicht.
Tim Down

248

Dass es deaktiviert werden kann.


12
+1, ich bin so müde von Seiten, die sich nicht einmal mit den Grundlagen einer anmutigen Verschlechterung beschäftigen, weil "es so schwer ist und jeder sowieso Javascript aktiviert hat".
Wasatz

27
+1. Eine Seite, die ohne JavaScript nicht funktioniert, ist eine Seite, die auch bei aktiviertem JS fragil ist.
Bobince

9
@iconiK Ich werde einfach allen meinen Regierungskunden, die JavaScript aus Sicherheitsgründen global deaktiviert haben, sagen, dass sie alle Idioten sind, oder?
Graphicdivine

16
-1 Dies ist kein Thema und hat eigentlich nichts mit dem Wissen über Javascript als Sprache zu tun. Es ist eine gute Sache, beim Entwerfen einer Web-App zu berücksichtigen, aber es ist immer noch keine Antwort, die in diesen Thread gehört.
TM.

24
@ TM, nein, es ist wirklich eine wichtige Überlegung. Dies sollte im Vordergrund Ihres Denkens stehen, wenn Sie Werte testen, bevor Sie sie in die Datenbank einfügen, oder die einzige Möglichkeit haben, sich über ein ausgefallenes Javascript-Popup-Feld bei Ihrer Website anzumelden. Apropos ... Ich denke, ich muss etwas überprüfen.
Elizabeth Buckwalter

75

Das Verständnis der in Crockfords Javascript: The Good Parts geschriebenen Dinge ist eine ziemlich gute Annahme, dass eine Person ein anständiger JS-Programmierer ist.

Sie können ziemlich genau wissen, wie man eine gute Bibliothek wie JQuery verwendet, und die verborgenen Teile von Javascript immer noch nicht kennen.

Ein weiterer Hinweis ist das Debuggen von Tools in verschiedenen Browsern. Ein JS-Programmierer sollte wissen, wie er seinen Code in verschiedenen Browsern debuggt.

Oh! Und wenn Sie wissen, dass JSLint Ihre Gefühle total verletzt !!


+1 Vergiss dieses Buch immer wieder, ausgezeichnete Empfehlung.
David

8
Es gibt auch viele lehrreiche und aufschlussreiche Crockford-Videos unter developer.yahoo.com/yui/theater - und ich denke, ich muss crockfordfacts.com nicht erwähnen :-)
ndim

+1 - JSLint ist eine wunderbare Sache, wenn Sie versuchen, JS für ein Framework zu entwickeln, das keine eingebettete Debugging-Unterstützung bietet ( Husten Siebel, Husten PDFs).
J. Polfer

49

Wenn Sie ein echter JavaScript-Ninja sein möchten, sollten Sie die Antworten auf jede Frage im Perfection Kills JavaScript Quiz kennen .

Ein Beispiel, um Appetit zu machen:

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

Was gibt dieser Ausdruck zurück?

  • "Nummer"
  • "nicht definiert"
  • "Funktion"
  • Error

10
Schauen Sie sich meine Antworten an: codingspot.com/2010/02/…
CMS

@CMS Sehr gut! Haben Sie beim ersten Mal tatsächlich alles richtig gemacht, oder beinhaltet dies einige Nachforschungen?
Skilldrick

7
Skilldrick: Ich glaube, ich habe sie alle zum ersten Mal bekommen, ich lese häufig den ECMA-262-Standard (ich weiß, ich bin ein Freak :-)
CMS

46

Sie kennen JavaScript nicht, wenn Sie nicht wissen:

  1. Verschlüsse
  2. Prototypbasierte Vererbung
  3. Das Modulmuster
  4. Das W3C-DOM
  5. Wie Ereignisse funktionieren

Diese Antwort gefällt mir sehr gut. Es hilft Ihnen, dunkle Bereiche in Ihrem Wissen zu erkennen. Ereignisse sind das einzige, was mir in dieser Checkliste noch etwas unklar ist (wenn das Modulmuster bedeutet, dass der globale Namespace nicht überlastet wird und daher Bereiche und den var-Operator enthält).
Silviot

11
Ich würde das argumentieren You don't know JavaScript if you don't know The W3C-DOM. Die beiden Dinge sind unterschiedlich.
Gblazex

37

..das Javascript ist nicht Java :)

Viele, viele Leute, die mit der Entwicklung von Websites beginnen, haben mir gesagt, dass Javascript nur einfaches Java ist!


+1 Dieser Punkt ist ziemlich grundlegend!
Amelvin

71
"JavaScript ist zu Java wie Teppich zu Auto."
Josh Lee

1
Javascript ist Java ungefähr so ​​ähnlich wie C # C. C. Sicher sieht die Syntax ein bisschen ähnlich aus, aber ganz anders.
Earlz

4
es sei denn, sie verwenden Google Web Toolkit
Afriza N. Arief

Interessanterweise hat Microsoft die Y2k-kompatiblen Datumsfunktionen in JScript für IE3 auf java.util.Date basiert.
Bayard Randel

27
  1. Machen Sie sich mit mindestens einer Javascript-Bibliothek (Jquery, Prototype usw.) vertraut.

  2. Erfahren Sie, wie Sie die Debugging-Tools der wichtigsten Browser (MSIE 7-8, Firefox, Chrome, Safari) verwenden.

  3. Informieren Sie sich über die Branche: Die Website von Douglas Crockford ist eine Fundgrube, während Ajaxian.com ein guter Blog ist, um über neue, interessante und seltsame Ideen für Javascript auf dem Laufenden zu bleiben. Es gibt eine Reihe anderer Ressourcen, aber diese haben mir am meisten geholfen.


Ernsthaft, warum die Abwahl?
David

+1 Zu viele taktische Abstimmungen, ernsthafte Leute sollten einfach die guten Antworten positiv bewerten und nicht nur versuchen, ihre Antwort nach oben zu bringen.
Amelvin

1
@Murali VP Ich habe die Annahme getroffen, dass Javascript im Kontext von Browsern "bekannt" ist. Unmittelbar nach einem Äquivalent zu Hallo Welt müssen Sie Ihre logischen und Laufzeitfehler herausfinden, die je nach Interpreter unterschiedlich sein können. Ich würde nicht behaupten, eine Sprache zu kennen, wenn ich nicht wüsste, wie man sie debuggt. In Bezug auf eine Framework-Anforderung ähnelt Javascript dem frühen C, in dem subtile Implementierungsunterschiede Unachtsame sabotieren. jQuery & prototypejs beschönigen diese Unterschiede und machen Javascript zu einem zuverlässigen Tool, während zusätzliche API-Aufrufe hinzugefügt werden, um die Produktivität zu steigern. (Fortsetzung)
David

@Murali VP Um fair zu sein, Javascript hat einen langen Weg zurückgelegt, seit ich es in den 90er Jahren verwendet habe. Mit Ausnahme von Microsoft haben die anderen Javascript-Interpreter beeindruckende Arbeit geleistet, um die Spezifikationen einzuhalten und fair zu spielen.
David

@ David danke für die nette Erklärung. Neigen dazu, Ihnen zuzustimmen.
Murali VP

24

Javascript- Objekte und fungieren als erstklassiger Bürger , Rückrufe , nicht zu vergessen Ereignisse und dann JQuery .


20
Ah jQuery, das überhypte JS-Framework!
Murali VP


23

Variablen sind global, sofern sie nicht als lokal deklariert sind !!

Schlecht (DoSomething () wird nur 10 Mal aufgerufen):

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

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

CountToFive();

Gut (DoSomething () wird wie vorgesehen 50 Mal aufgerufen):

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
Ich hatte noch nie darüber nachgedacht. Sehr guter Punkt.
Olive

6
Ich versuche, mich an for (var i=0;alle meine Loops zu
gewöhnen

2
Crockford zieht es vor, das varan die Spitze der Funktion zu setzen, da es Sie nicht über die Größe des Gültigkeitsbereichs der Variablen täuscht. js2-modewird sich beschweren, wenn Sie sich var iin zwei getrennten forSchleifen in derselben Funktion befinden, da dies darauf hindeutet, dass Sie glauben, zwei getrennte Variablen zu haben, und dies nicht tun. Trotzdem versuche ich, varDinge niemals von dem Ort zu trennen, an dem ich sie initialisiere.
Kragen Javier Sitaker

Es ist mir egal, ob es keinen Umfang hat. Ich kann es nicht ertragen, wenn eine Variable 20 Zeilen deklariert wird, bevor sie verwendet wird
Juan Mendes


8

Zu wissen, dass Javascript ursprünglich LiveScript hieß und das Präfix 'Java' zu Marketingzwecken angehängt wurde, nicht weil Java und Javascript verwandt sind (was sie nicht sind).

Oh, und für den Besitz einer Version von David Flanagans 'Javascript: The Definitive Guide' (diese Informationen finden Sie auf Seite 2).

... und um diejenigen zu würdigen, die zuvor versucht haben, das document.all [] von Internet Explorer 4 und die document.layers [] von Netscape Navigator 4 zu verschleiern, bevor Jquery den Schmerz beseitigt hat.

BEARBEITEN:

Wie @Kinopiko darauf hinweist, wurde JavaScript ursprünglich als Projekt Mocha bezeichnet ( einige Quellen gehen auch davon aus, dass es als Projekt LiveWire bezeichnet wurde), aber es wird allgemein angenommen, dass die Sprache (geschrieben von Brendan Eich) als LiveScript veröffentlicht werden sollte, bevor das Java-Präfix übernommen wurde Veröffentlichung Anfang 1996.


+1 für die Auswahl von Meisen von Douglas Crockford!
Gath

1
Ich dachte, JavaScript hieß ursprünglich Mokka?

1
@Kinopiko Nach meinem Buch 'Javascript: The Definitive Guide' 3ed (Juni 1998) von David Flanaghan hieß es LiveScript.
Amelvin

@gath Ein Tag, an dem du etwas lernst, ist ein guter Tag!
Amelvin

1
@amelvin Jeder Tag ist ein Schultag.
Oberst Sponsz

8

Man sollte sich über Folgendes bewusst sein, um "Ich kenne JavaScript" zu sagen:

  1. JavaScript ist gut, aber DOM ist ein Schmerzpunkt
  2. Browserübergreifende Probleme können Sie verrückt machen
  3. Wenn der Code nicht in mindestens 4 verschiedenen guten Browsern getestet wurde , kann man nicht sagen, dass er fehlerfrei ist
  4. Schließung .............. Muss wissen
  5. Sein Prototyp basiert ........... Schön, dass es Spaß macht, dies zu lernen
  6. Debugger- Schlüsselwort ..... Hilft in der Krise

Schöne Liste, ziemlich schlank. Ich habe über "4" gute Browser gelacht. :) Ich denke, Nummer 7 sollte ein gesunder Hass für IE-Browser unter Version 8 sein.
Shyam

@Shyam, warum denkst du, wir sollten keinen gesunden Hass auf IE8 haben? Ich habe immer noch Probleme in IE8 ... Probleme, die nur in IE8 auftreten.
Tracker1

@ Tracker1: Es wird immer Probleme geben. Und einen Browser zu verprügeln, den ich nicht berührt habe, wäre ein bisschen unfair. Deshalb habe ich über 4 gute Browser gelacht: "Firefox, Chrome, Safari und Opera" sind die einzigen, für die ich entwickle. Ich habe aufgehört, für IE zu hacken. Ich habe nur dafür gesorgt, dass Fisher Price-Code ausgeführt wird, als ob JavaScript deaktiviert wäre.
Shyam

7

Dieses JavaScript unterscheidet sich viel mehr von anderen Sprachen als Sie vielleicht denken. Sehen Sie sich diesen großartigen Google Tech Talk an, um sich einen Eindruck zu verschaffen : http://www.youtube.com/watch?v=hQVTIJBZook


1
+1 Dies ist eine großartige Erklärung, wie Sie das JavaScript-Saugen stoppen können. Diese sind später sehenswert: yuiblog.com/crockford
Colonel Sponsz

Eine weitere gute Crockfod-Präsentation ("The JavaScript Programming Language" 4 Teile) video.yahoo.com/watch/111593/1710507
Alex K.

7

Was sollte jeder Javascript-Codierer wissen?

Wie wäre es, ich kann Ihre Bemühungen mit 2 Klicks ausschalten. Stellen Sie also nach Möglichkeit einen Fallback bereit.


Sie können auch Ihren Webbrowser deinstallieren. Es gibt heutzutage nur sehr wenige Menschen, die Javascript deaktivieren. Diejenigen, die wahrscheinlich nicht im Internet surfen müssen. Die einzige Ausnahme besteht darin, dass Webcrawler auf Ihre öffentlichen Inhalte zugreifen müssen und sich nicht auf JS verlassen können.
Jean Vincent

Ich bin mehr daran interessiert, Nicht-JS-Möglichkeiten für den Zugriff auf Dinge bereitzustellen. Ich kenne Leute, die mit deaktiviertem JS surfen oder Screenreader verwenden. Sie spielen nicht immer gut mit JS. Ich habe Websites gesehen, auf denen eine einfache Anmeldeseite über Ajax ohne Fallback gesendet wird. Kein JS, kein Login. Die Site verwendet nicht einmal viel JS, nur um Formulare einzureichen.
Khainestar

Ich glaube, dass Benutzer, die JS absichtlich deaktivieren, wie Sie angedeutet haben, heute sehr selten sind, sicherlich viel weniger als vor 10 Jahren. Aus diesem Grund verstehe ich nicht, warum wir eine Website zweimal für Leute entwerfen sollten, die Ihre Website sowieso nicht wirklich besuchen möchten. In Ihrem Beispiel können sie sich nicht anmelden, na und? Die andere Sache ist, dass es ohne JS absolut keine Möglichkeit gibt, eine moderne Site zu entwerfen.
Jean Vincent


6

Sie kennen Javascript, wenn Sie Array, Number, String, Date und Object effektiv einsetzen können. Pluspunkte für Math und RegExp. Sie sollten in der Lage sein, Funktionen zu schreiben und Variablen zu verwenden (im richtigen Bereich, dh als 'Methoden' eines Objekts).

Ich sehe einige Kommentare über das Wissen um Verschlüsse, extravagante Funktionssyntax und Blabla. All das ist für diese Frage ziemlich irrelevant. Das heißt, Sie sind ein Läufer, wenn Sie den 100-Meter-Lauf in weniger als 11 Sekunden laufen können.

Ich sage, es dauert vielleicht ein paar Wochen, um Javascript zu beherrschen. Danach dauert es Jahre und Dutzende von Büchern und Tausenden von Programmzeilen, um ein Experte, ein Ninja usw. zu werden.

Aber das war nicht die Frage.

Oh, und das DOM ist kein Teil von Javascript und jQuery auch nicht. Daher denke ich, dass beide für die Frage gleichermaßen irrelevant sind.


1
Die Schließung ist da, ob Sie sich darum kümmern oder nicht. Es ist mächtig, kann aber leicht missbraucht werden. Sie kennen die Sprache nicht, wenn Sie nicht wissen, wie sie funktioniert.
Gblazex

Abgesehen von den Schäden, die Schließungen verursachen können, wie Speicherlecks, insbesondere in unserem wahren Freund Internet Explorer 6.
Marcel Korpel


4

Nachdem Sie alle oben genannten Informationen gelesen haben, ist es auch vollkommen in Ordnung , Javascript mithilfe eines Frameworks wie jQuery zu lernen. Die Wahrheit ist, dass es der erste Weg ist, wie viele Leute JS überhaupt aufgegriffen haben. Keine Schande.


4

Array . lengthMethode ist nicht die Anzahl der Elemente des Arrays, sondern der höchste Index. auch wenn der Artikel auf eingestellt warundefined

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

Dieses Verhalten ist kaum von einem Sprachdesignfehler zu unterscheiden.


3

jQuery wäre meine beste Empfehlung. Nicht nur für den Code selbst ist es die Redewendung, der Stil, das Denken dahinter, das es am meisten wert ist, emuliert zu werden.


2
+1 Jquery hat meine Verwendung von Javascript revolutioniert.
Amelvin

1
Gute Argumentation. Eine Erweiterung wäre eine gute Antwort.
Donal Fellows

jQuery zwingt Sie in einen prozeduralen Modus. Ich schreibe viel lieber OO JS
Juan Mendes

Objektorientierung ist nichts Magisches. Ich würde lieber ein Framework verwenden, das von John Resig entworfen und von Tausenden anderer Entwickler verwendet wird, als alles, was Sie oder ich schreiben würden, unabhängig vom Modus.
Duffymo

3

Dieses Javascript ist die am weitesten verbreitete Sprache der Welt. (Wahrscheinlich)


8
Die am weitesten verbreitete natürliche Muttersprache ist Mandarin. Würde Sie das zu einem Mandarin-Sprecher machen? Würde das Wissen um diese Tatsache überhaupt etwas mit Ihrem Sprachverständnis zu tun haben?
Zano

11
Die am weitesten verbreitete Sprache der Welt ist der genetische Code der DNA, der die Proteinsynthese in den Zellen steuert.
Ernelli

Vor Mandarin und DNA muss zuerst die Sprache der Liebe eingesetzt werden: Sie gewinnt also. BAM!
Christopher

3

Das Erlernen einer Sprache und das Verstehen ihrer verschiedenen Macken beruht auf (jahrelanger) Erfahrung. Wenn Sie ein besserer Programmierer sein möchten, würde ich sagen, Designmuster verstehen, wie und wann sie verwendet werden sollen und / oder sogar wenn Sie sie verwenden, ohne es zu merken; technische Architektur & Benutzererfahrung.

Wenn Sie die (JavaScript-) Sprache kennen, können Sie jedes Framework auswählen und nach Belieben verwenden. Sie müssen unweigerlich in den Quellcode eintauchen, und wenn Sie nur die Syntax eines Frameworks oder 2 oder 3 kennen, werden Sie nicht weit kommen. Wenn Sie dies sagen, ist der Zugriff auf den Quellcode einiger verschiedener Frameworks wahrscheinlich eine der besten Möglichkeiten, um zu sehen, wie JavaScript verwendet werden kann. Durchspielen Sie den Code in Firebug oder Web Inspector und überprüfen Sie anschließend die JavaScript-Dokumentation, insbesondere die Mozilla- und Webkit-Dokumente, um ein besseres Verständnis für Ihre Inhalte zu erhalten.

Wenn Sie den Unterschied zwischen objektorientierter und funktionaler Programmierung verstehen, dass JavaScript eine sexy Mischung aus beidem ist und wann und wie Sie beide verwenden, um eine Killer-Codebasis und großartige Anwendungen zu erstellen, werden Sie zu einem besseren JavaScript-Programmierer.

Wenn Sie nur einige Bücher lesen, insbesondere Crockfords "gute Teile", in denen lediglich seine Meinung zu den guten Eigenschaften von JavaScript wiedergegeben wird, während Sie die meisten der FANTASTISCHEN Teile von JavaScript überspringen, werden Sie auf dem falschen Fuß davonkommen.

Wenn Sie sich Code ansehen, der von jemandem wie Thomas Fuchs geschrieben wurde, erhalten Sie viel mehr Einblick in die Möglichkeiten, erstaunliches und effizientes JavaScript zu schreiben.

Der Versuch, sich ein paar Fallstricke oder WTFs zu merken, hilft auch nicht viel. Sie werden das aufgreifen, wenn Sie mit dem Codieren beginnen und den Code einer Bibliothek / eines Frameworks, insbesondere eines hilfreich kommentierten, durchgehen, um zu sehen, warum sie bestimmte verwendet haben Eigenschaften / Werte und nicht andere, warum und wann es gut ist, bestimmte Operanden und Operatoren zu verwenden, ist dies alles im Code der Benutzer des Frameworks enthalten. Wie besser als mit gutem Beispiel zu lernen? : ^)


+1 für die Nichtanbetung von Crockford. Ich behandle seine Ansichten wie einen Prediger in der Kirche. Ich respektiere, was sie sagen, aber nehme alles mit einem Körnchen Salz.
Juan Mendes

2

In Javascript ist Leistung wichtig.

Es gibt keinen intelligenten Compiler, der Ihren Code optimiert. Sie sollten also beim Schreiben von Javascript-Code vorsichtiger sein als Sprachen wie C #, Java ...


1
In der Tat sind Browser-Compiler sehr gut darin, Ihren Code zu optimieren.
Eduardo

1
Chrome ist sehr klug bei der Optimierung Ihres Codes. Diese Antwort trifft einfach nicht auf alle neuen JS-Engines zu
Juan Mendes

Was ist mit IE, mobilen Browsern?
Caltuntas

1

Objektliterale, weil sie so schön zu schreiben sind.



0
  1. Zu wissen, dass es ein Leben mit und ohne gibt with()und wo man die Grenze ziehen kann.
  2. Sie können mit der throwAnweisung benutzerdefinierte Fehler erstellen , um die Javascript-Laufzeit absichtlich zu stoppen.

-1

JavaScript unterstützt keine Trennung Schlüsselworts return und der Anweisung return mit einem Zeilenumbruchzeichen wie dem folgenden Code nicht (oder versuchen Sie es auf meiner jsFiddle-Seite ).

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

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

Ich verstehe nicht, warum JavaScript diesen Stil nicht unterstützt, da es viel einfacher ist, sehr komplexen JavaScript-Quellcode zu lesen, wenn man ihn mit dem Standardstil von JavaScript vergleicht.

PS. Ich habe JavaScript fast 6 Jahre geschrieben. Aber ich habe diesen Fehler gerade bei mir selbst gefunden, als ich versuchte, die folgende Funktion auszuführen. Es wird immer undefiniert zurückgegeben. Wenn ich den Debugger benutze und in diese Funktion einsteige, funktioniert alles einwandfrei. Ich denke, es sollte der schlimmste Programmierfehler in meinem Leben sein.

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
In JavaScript dienen Zeilenumbruchzeichen normalerweise als Trennzeichen für Anweisungen. Nur wenn es unmöglich ist, eine Anweisung zu beenden (z. B. var foo = "bar" +), liest der Parser weiter.
Marcel Korpel


2
@Marcel - Das stimmt nicht genau; Zum Beispiel werden die beiden Zeilen var foo = 5und -1;dazu führen, dass foo auf 4 gesetzt wird, obwohl jede für sich gültige Anweisungen sind.
Ben Blank

4
Dies liegt daran, dass die Sprache Semikolons automatisch in separate Anweisungen einfügt. Dies ist ein Gotcha mit der Sprache. Ihre return-Anweisung wird in Folgendes konvertiert: return; {key: value,} Um dieses Problem zu vermeiden, sollten Sie die Praxis anwenden, Semikolons in dieselbe Zeile zu setzen: return {key: value}; Tun Sie sich auch einen Gefallen und holen Sie sich eine Kopie von Douglas Crockford: The Good Parts. Dies wird im Buch deutlich erwähnt.
Rajat

@ Ben - Interessanter Fall, danke, dass Sie darauf hingewiesen haben. Trotzdem würde ich empfehlen, sich nicht auf diese Randfälle zu verlassen und einfach alles in eine Zeile zu setzen, die mit einem Semikolon endet, und Ihren Code nur in mehrere Zeilen zu setzen, wenn eine Zeile mit etwas endet, mit dem eine Anweisung oder ein Ausdruck einfach nicht enden kann .
Marcel Korpel

-3

Da JS eine funktionale Sprache ist, muss ein anständiger JS-Programmierer in der Lage sein, Y-Combinator zu schreiben und zu erklären, wie es auf den ersten Blick funktioniert.


1
Was ist falsch daran, Y-Kombinatoren schreiben zu können? Und ja, Javascript ist eine funktionale Sprache. Wenn Sie sagen möchten, dass Sie "Javascript kennen", ist ein gutes Verständnis der funktionalen Programmierung erforderlich.
Raynos

C kann auch als funktionale Sprache verwendet werden.
kzh

Ich habe kürzlich über den Y-Kombinator gelesen, verstehe, wie er funktioniert und in welchen Fällen er verwendet werden kann. Ich habe jedoch nie eine Instanz gefunden, in der ich ein Problem nicht umschreiben konnte, um den Y-Kombinator nicht zu benötigen.
Evert

-5

... über Google Web Toolkit , was bedeutet, dass Ihr Javascript-Projekt wahrscheinlich viel komfortabler entwickelt werden könnte.


2
GWT ist nicht wirklich JavaScript, es ist die Java-Art, JavaScript zu schreiben.
Livingston Samuel

... und jeder Javascipt-Programmierer sollte davon wissen.
Viktor Sehr

dass Ihr Javascript-Projekt wahrscheinlich viel komfortabler entwickelt werden könnte.
Viktor Sehr

6
Ich denke, Javascript ist einfacher zu handhaben als Java persönlich.
timw4mail
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.