Heim Web-Frontend js-Tutorial Meine NodeJs-Lernzusammenfassung (1)_node.js

Meine NodeJs-Lernzusammenfassung (1)_node.js

May 16, 2016 pm 04:42 PM
nodejs

Lassen Sie uns in diesem ersten Artikel über einige Programmierdetails von NodeJs sprechen.

1. Durchqueren Sie das Array

for (var i=0, l=arr.length; i<l; i++)
Nach dem Login kopieren

Ein Vorteil dieser Schreibweise besteht darin, dass jede Schleife einen Schritt einspart, um die Länge des Array-Objekts zu ermitteln. Je länger die Array-Länge, desto offensichtlicher ist der Wert.

2. Bestimmen Sie, ob die Variable wahr oder falsch ist

if (a) {...} //a='', a='0', a=[], a={}
Nach dem Login kopieren

Die Ergebnisse der bedingten Beurteilung sind: falsch, wahr, wahr, wahr. Dieses Ergebnis unterscheidet sich vom PHP-Ergebnis. Lassen Sie sich nicht verwirren. Es ist auch notwendig, zwischen Situationen zu unterscheiden, die Nichtidentitätsurteilen ähneln.

3. Beurteilung der Nichtidentität mit dem Wert 0

1 if (0 == '0') {...} //true
2 if (0 == []) {...} //true
3 if (0 == [0]) {...} //true
4 if (0 == {}) {...} //false
5 if (0 == null) {...} //false
6 if (0 == undefined) {...} //false
Nach dem Login kopieren

Tatsächlich gibt es viele solcher seltsamen Urteile, ich habe nur die häufigeren aufgelistet. Wenn Sie die Regeln verstehen möchten, lesen Sie bitte meinen anderen Blog-Beitrag: [JavaScript] Ausführliche Analyse der relationalen Operationen und if-Anweisungen von JavaScript.

4. Die Falle von parseInt

var n = parseInt(s); //s='010'
Nach dem Login kopieren

Nachdem diese Anweisung ausgeführt wurde, beträgt der Wert von n 8 und nicht 10. Obwohl viele Leute das wissen, sind Fehler beim Programmieren unvermeidlich, und ich weiß es sehr gut. Daher ist es am besten, so zu schreiben, dass Sie keine Fehler machen.

var n = parseInt(s, 10);
Nach dem Login kopieren

5. Variablen müssen vor der Verwendung deklariert werden

Obwohl es keinen Fehler gibt, Variablen direkt zu verwenden, ohne sie zu deklarieren, ist das Schreiben auf diese Weise sehr fehleranfällig. Da der Interpreter sie als globale Variable interpretiert, kann sie leicht denselben Namen wie andere globale Variablen haben und Fehler verursachen. Daher müssen wir eine gute Angewohnheit entwickeln, Variablen zu deklarieren, bevor wir sie verwenden.

6. Es liegt eine asynchrone Situation in der Schleife vor

for (var i=0, l=arr.length; i<l; i++) {
   var sql = "select * from nx_user";
  db.query(sql, function(){
    sys.log(i + ': ' + sql);
  }); //db.query为表查询操作,是异步操作
}
Nach dem Login kopieren

Sie werden feststellen, dass die Ausgabeergebnisse dieselben sind und dass sie der Ausgabeinhalt sind, wenn i = arr.length-1. Da JavaScript Single-Threaded ist, führt es zunächst den synchronen Inhalt der gesamten Schleife aus, bevor die asynchronen Vorgänge ausgeführt werden. Die anonyme Rückruffunktion im Code ist ein asynchroner Rückruf. Wenn diese Funktion ausgeführt wird, sind die for-Schleife und einige nachfolgende Synchronisierungsvorgänge abgeschlossen. Aufgrund des Abschlussprinzips behält diese Funktion den Inhalt der SQL-Variablen und der i-Variablen in der letzten Schleife der for-Schleife bei, was zu falschen Ergebnissen führt.

Was sollen wir also tun? Es gibt zwei Lösungen: Eine davon besteht darin, eine Sofortfunktion wie folgt zu verwenden:

for (var i=0, l=arr.length; i<l; i++) {
  var sql = "select * from nx_user";
  (function(sql, i){
    db.query(sql, function(){
      sys.log(i + ': ' + sql);
    }); //db.query为表查询操作,是异步操作
  })(sql, i);
}
Nach dem Login kopieren

Eine andere Methode besteht darin, den asynchronen Operationsteil zu extrahieren und eine Funktion wie folgt zu schreiben:

var outputSQL = function(sql, i){
   db.query(sql, function(){
      sys.log(i + ': ' + sql);
  }); //db.query为表查询操作,是异步操作
}

for (var i=0, l=arr.length; i<l; i++) {
  var sql = "select * from nx_user";
  outputSQL(sql, i); 
}
Nach dem Login kopieren


7. Vermeiden Sie bei der Verarbeitung großer Datenmengen verschachtelte Schleifen.

Da die Verarbeitungszeit verschachtelter Schleifen mit zunehmender Datenmenge exponentiell zunimmt, sollte dies so weit wie möglich vermieden werden. Wenn es in diesem Fall keinen besseren Weg gibt, besteht die allgemeine Strategie darin, Raum gegen Zeit zu tauschen, also eine Hash-Mapping-Tabelle sekundärer zyklischer Daten zu erstellen. Natürlich müssen die konkreten Umstände im Einzelfall analysiert werden. Ein weiterer zu erwähnender Punkt ist, dass einige Methoden selbst ein Schleifenkörper sind, wie z. B. Array.sort() (diese Methode sollte mithilfe von zwei Schleifenebenen implementiert werden), sodass Sie bei der Verwendung darauf achten müssen.

8. Versuchen Sie, rekursive Aufrufe zu vermeiden.

Der Vorteil des rekursiven Aufrufs besteht darin, dass der Code prägnant und die Implementierung einfach ist. Die Nachteile sind jedoch sehr wichtig und werden wie folgt erläutert:

(1) Die Größe des Funktionsstapels wächst linear mit der Rekursionsebene, und der Funktionsstapel hat eine Obergrenze. Wenn die Rekursion eine bestimmte Ebene erreicht, läuft der Funktionsstapel über, was zu Programmfehlern führt

(2) Jede rekursive Ebene fügt zusätzliche Stack-Push- und Pop-Operationen hinzu, dh das Speichern der Szene und das Wiederherstellen der Szene während des Funktionsaufrufs.

Daher sollten rekursive Aufrufe so weit wie möglich vermieden werden.

9. Bezüglich der Bereichsisolierung von Moduldateien.

Wenn Node die JavaScript-Moduldatei kompiliert, wurde ihr Inhalt vollständig wie folgt gepackt:

(function(exports, require, module, __filename, __dirname){
  你的JavaScript文件代码
});
Nach dem Login kopieren
Dies ermöglicht eine Bereichsisolierung zwischen den einzelnen Moduldateien. Daher müssen Sie beim Schreiben von NodeJs-Moduldateien keine Ebene der Bereichsisolationskapselung selbst hinzufügen. Das folgende Codeformat fügt nur eine zusätzliche Ebene von Funktionsaufrufen hinzu, was nicht empfohlen wird:

(function(){
  ... ...
})();
Nach dem Login kopieren
10. Mischen Sie keine Arrays und Objekte

Das Folgende ist ein Beispiel für einen Fehlercode:

var o = [];
o['name'] = 'LiMing';
Nach dem Login kopieren
Das Mischen von Arrays und Objekten kann zu unvorhersehbaren Fehlern führen. Einer meiner Kollegen ist auf ein sehr seltsames Problem gestoßen. Schauen wir uns zuerst den Code an:

var o = [];
o['name'] = 'LiMing';
var s = JSON.stringify(o);
Nach dem Login kopieren

Ursprünglich dachte er, dass das Namensattribut des Objekts o in der JSON-Zeichenfolge enthalten sein würde, aber das Ergebnis war, dass dies nicht der Fall war. Ich war damals auch sehr überrascht, aber ich hatte den Verdacht, dass es ein Problem mit der Vermischung von Arrays und Objekten war. Ich habe es ausprobiert und es stellte sich heraus, dass es das Problem war. Später habe ich in der ECMA-Spezifikation herausgefunden, dass Arrays nach JA-Regeln serialisiert werden. Daher ist es notwendig, eine gute Programmiergewohnheit zu entwickeln, Arrays und Objekte richtig zu verwenden und sie nicht zu vermischen.

11. Elegante Promise-Programmierung

Ich glaube, dass jeder, der mit nodeJs in Kontakt gekommen ist, diese Erfahrung gemacht hat. Wenn asynchrone Rückrufe in asynchronen Rückrufen verschachtelt sind, wird der Code verwirrend und unleserlich. Dieses Dilemma von NodeJs kann mit Hilfe von Versprechen überwunden werden. Versprechen ist wie ein Schnitzer, der Ihren Code elegant und schön macht. Promise hat eine A-Spezifikation und es gibt online mehrere Implementierungsmethoden, auf die Sie sich beziehen können.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Der Unterschied zwischen NodeJS und Tomcat Der Unterschied zwischen NodeJS und Tomcat Apr 21, 2024 am 04:16 AM

Die Hauptunterschiede zwischen Node.js und Tomcat sind: Laufzeit: Node.js basiert auf der JavaScript-Laufzeit, während Tomcat ein Java-Servlet-Container ist. E/A-Modell: Node.js verwendet ein asynchrones, nicht blockierendes Modell, während Tomcat synchrones Blockieren verwendet. Parallelitätsbehandlung: Node.js verarbeitet die Parallelität über eine Ereignisschleife, während Tomcat einen Thread-Pool verwendet. Anwendungsszenarien: Node.js eignet sich für Echtzeit-, datenintensive und Anwendungen mit hoher Parallelität, und Tomcat eignet sich für herkömmliche Java-Webanwendungen.

Der Unterschied zwischen NodeJS und VueJS Der Unterschied zwischen NodeJS und VueJS Apr 21, 2024 am 04:17 AM

Node.js ist eine serverseitige JavaScript-Laufzeitumgebung, während Vue.js ein clientseitiges JavaScript-Framework zum Erstellen interaktiver Benutzeroberflächen ist. Node.js wird für die serverseitige Entwicklung verwendet, beispielsweise für die Entwicklung von Back-End-Service-APIs und die Datenverarbeitung, während Vue.js für die clientseitige Entwicklung verwendet wird, beispielsweise für Single-Page-Anwendungen und reaktionsfähige Benutzeroberflächen.

Ist NodeJS ein Backend-Framework? Ist NodeJS ein Backend-Framework? Apr 21, 2024 am 05:09 AM

Node.js kann als Backend-Framework verwendet werden, da es Funktionen wie hohe Leistung, Skalierbarkeit, plattformübergreifende Unterstützung, ein umfangreiches Ökosystem und einfache Entwicklung bietet.

Was ist der Unterschied zwischen den Dateien npm und npm.cmd im Installationsverzeichnis von nodejs? Was ist der Unterschied zwischen den Dateien npm und npm.cmd im Installationsverzeichnis von nodejs? Apr 21, 2024 am 05:18 AM

Es gibt zwei npm-bezogene Dateien im Node.js-Installationsverzeichnis: npm und npm.cmd. Die Unterschiede sind wie folgt: unterschiedliche Erweiterungen: npm ist eine ausführbare Datei und npm.cmd ist eine Befehlsfensterverknüpfung. Windows-Benutzer: npm.cmd kann über die Eingabeaufforderung verwendet werden, npm kann nur über die Befehlszeile ausgeführt werden. Kompatibilität: npm.cmd ist spezifisch für Windows-Systeme, npm ist plattformübergreifend verfügbar. Nutzungsempfehlungen: Windows-Benutzer verwenden npm.cmd, andere Betriebssysteme verwenden npm.

So verbinden Sie NodeJS mit der MySQL-Datenbank So verbinden Sie NodeJS mit der MySQL-Datenbank Apr 21, 2024 am 06:13 AM

Um eine Verbindung zu einer MySQL-Datenbank herzustellen, müssen Sie die folgenden Schritte ausführen: Installieren Sie den MySQL2-Treiber. Verwenden Sie mysql2.createConnection(), um ein Verbindungsobjekt zu erstellen, das die Hostadresse, den Port, den Benutzernamen, das Passwort und den Datenbanknamen enthält. Verwenden Sie „connection.query()“, um Abfragen durchzuführen. Verwenden Sie abschließend Connection.end(), um die Verbindung zu beenden.

Ist NodeJS eine Back-End-Entwicklungssprache? Ist NodeJS eine Back-End-Entwicklungssprache? Apr 21, 2024 am 05:09 AM

Ja, Node.js ist eine Backend-Entwicklungssprache. Es wird für die Back-End-Entwicklung verwendet, einschließlich der Handhabung serverseitiger Geschäftslogik, der Verwaltung von Datenbankverbindungen und der Bereitstellung von APIs.

Was sind die globalen Variablen in NodeJS? Was sind die globalen Variablen in NodeJS? Apr 21, 2024 am 04:54 AM

Die folgenden globalen Variablen sind in Node.js vorhanden: Globales Objekt: global Kernmodul: Prozess, Konsole, erforderlich Laufzeitumgebungsvariablen: __dirname, __filename, __line, __column Konstanten: undefiniert, null, NaN, Infinity, -Infinity

Gibt es einen großen Unterschied zwischen NodeJS und Java? Gibt es einen großen Unterschied zwischen NodeJS und Java? Apr 21, 2024 am 06:12 AM

Die Hauptunterschiede zwischen Node.js und Java sind Design und Funktionen: Ereignisgesteuert vs. Thread-gesteuert: Node.js ist ereignisgesteuert und Java ist Thread-gesteuert. Single-Threaded vs. Multi-Threaded: Node.js verwendet eine Single-Threaded-Ereignisschleife und Java verwendet eine Multithread-Architektur. Laufzeitumgebung: Node.js läuft auf der V8-JavaScript-Engine, während Java auf der JVM läuft. Syntax: Node.js verwendet JavaScript-Syntax, während Java Java-Syntax verwendet. Zweck: Node.js eignet sich für I/O-intensive Aufgaben, während Java für große Unternehmensanwendungen geeignet ist.

See all articles