JS-Tutorial

JS-HAUS JS-Einführung JS Wohin JS-Ausgabe JS-Anweisungen JS-Syntax JS-Kommentare JS-Variablen JS Let JS Konst JS-Operatoren JS-Arithmetik JS-Aufgabe JS-Datentypen JS-Funktionen JS-Objekte JS-Ereignisse JS-Strings JS-String-Methoden Suche nach JS-Strings JS-String-Vorlagen JS-Nummern JS-Zahlenmethoden JS-Arrays JS-Array-Methoden JS-Array-Sortierung JS-Array-Iteration JS-Array-Konstante JS-Daten JS-Datumsformate JS Date Get-Methoden JS-Datumssatzmethoden JS Math JS Zufällig JS Boolesche Werte JS-Vergleiche JS-Bedingungen JS-Schalter JS-Schleife für JS-Schleife für In JS-Schleife für Of JS-Schleife While JS Pause JS-Iterables JS-Sets JS-Karten JS Typeof JS-Typkonvertierung JS Bitweise JS RegExp JS-Fehler JS-Bereich JS Heben Strenger JS-Modus JS dieses Schlüsselwort JS-Pfeilfunktion JS-Klassen JS JSON JS-Debugging JS-Styleguide JS Best Practices JS-Fehler JS-Leistung JS Reservierte Wörter

JS-Versionen

JS-Versionen JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / Edge JS-Geschichte

JS-Objekte

Objektdefinitionen Objekteigenschaften Objektmethoden Objektanzeige Objektzugriffsmethoden Objektkonstruktoren Objekt-Prototypen Objekt-Iterables Objektsätze Objektkarten Objektreferenz

JS-Funktionen

Funktionsdefinitionen Funktionsparameter Funktionsaufruf Funktionsaufruf Funktion anwenden Funktionsschließungen

JS-Klassen

Klasse Einführung Klassenvererbung Klasse statisch

JS asynchron

JS-Rückrufe JS asynchron JS verspricht JS Async/Warten

JS-HTML-DOM

DOM-Einführung DOM-Methoden DOM-Dokument DOM-Elemente DOM-HTML DOM-Formulare DOM-CSS DOM-Animationen DOM-Ereignisse DOM-Ereignis-Listener DOM-Navigation DOM-Knoten DOM-Sammlungen DOM-Knotenlisten

Stückliste des JS-Browsers

JS-Fenster JS-Bildschirm JS-Standort JS-Geschichte JS-Navigator JS-Popup-Warnung JS-Timing JS-Cookies

JS-Web-APIs

Web-API-Einführung Web Forms-API Webprotokoll-API Webspeicher-API Web Worker-API Web-Fetch-API Web-Geolocation-API

JS AJAX

AJAX-Einführung AJAX-XMLHttp AJAX-Anfrage AJAX-Antwort AJAX-XML-Datei AJAX-PHP AJAX ASP AJAX-Datenbank AJAX-Anwendungen AJAX-Beispiele

JS JSON

JSON-Einführung JSON-Syntax JSON vs. XML JSON-Datentypen JSON-Parsing JSON-Stringify JSON-Objekte JSON-Arrays JSON-Server JSON-PHP JSON-HTML JSON JSONP

JS vs. jQuery

jQuery-Selektoren jQuery-HTML jQuery-CSS jQuery-DOM

JS-Grafik

JS-Grafik JS-Leinwand JS Plotly JS Chart.js JS Google-Diagramm JS D3.js

JS-Beispiele

JS-Beispiele JS-HTML-DOM JS-HTML-Eingabe JS-HTML-Objekte JS-HTML-Ereignisse JS-Browser JS-Editor JS-Übungen JS-Quiz JS-Zertifikat

JS-Referenzen

JavaScript-Objekte HTML-DOM-Objekte


Best Practices für JavaScript


Vermeiden Sie globale Variablen, vermeiden Sie new, vermeiden Sie ==, vermeiden Sieeval()


Vermeiden Sie globale Variablen

Minimieren Sie die Verwendung globaler Variablen.

Dazu gehören alle Datentypen, Objekte und Funktionen.

Globale Variablen und Funktionen können von anderen Skripten überschrieben werden.

Verwenden Sie stattdessen lokale Variablen und lernen Sie, wie man Closures verwendet .


Deklarieren Sie immer lokale Variablen

Alle in einer Funktion verwendeten Variablen sollten als lokale Variablen deklariert werden.

Lokale Variablen müssen mit dem var Schlüsselwort oder dem letSchlüsselwort oder dem constSchlüsselwort deklariert werden, sonst werden sie zu globalen Variablen.

Der strikte Modus erlaubt keine nicht deklarierten Variablen.


Erklärungen oben

Es ist eine gute Programmierpraxis, alle Deklarationen am Anfang jedes Skripts oder jeder Funktion zu platzieren.

Dieser Wille:

  • Geben Sie einen saubereren Code ein
  • Stellen Sie einen einzigen Ort bereit, an dem Sie nach lokalen Variablen suchen können
  • Erleichtern Sie das Vermeiden unerwünschter (implizierter) globaler Variablen
  • Reduzieren Sie die Möglichkeit unerwünschter erneuter Deklarationen
// Declare at the beginning
let firstName, lastName, price, discount, fullPrice;

// Use later
firstName = "John";
lastName = "Doe";

price = 19.90;
discount = 0.10;

fullPrice = price - discount;

Dies gilt auch für Schleifenvariablen:

for (let i = 0; i < 5; i++) {


Variablen initialisieren

Es ist eine gute Codierungspraxis, Variablen zu initialisieren, wenn Sie sie deklarieren.

Dieser Wille:

  • Geben Sie einen saubereren Code ein
  • Stellen Sie einen einzelnen Ort zum Initialisieren von Variablen bereit
  • Vermeiden Sie undefinierte Werte
// Declare and initiate at the beginning
let firstName = "",
let lastName = "",
let price = 0,
let discount = 0,
let fullPrice = 0,
const myArray = [],
const myObject = {};

Das Initialisieren von Variablen vermittelt eine Vorstellung von der beabsichtigten Verwendung (und dem beabsichtigten Datentyp).


Deklarieren Sie Objekte mit const

Das Deklarieren von Objekten mit const verhindert versehentliche Typänderungen:

Beispiel

let car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat";      // Changes object to string

const car = {type:"Fiat", model:"500", color:"white"};
car = "Fiat";      // Not possible

Deklarieren Sie Arrays mit const

Das Deklarieren von Arrays mit const verhindert versehentliche Typänderungen:

Beispiel

let cars = ["Saab", "Volvo", "BMW"];
cars = 3;    // Changes array to number

const cars = ["Saab", "Volvo", "BMW"];
cars = 3;    // Not possible

Neues Objekt nicht verwenden()

  • Verwenden Sie ""stattnew String()
  • Verwenden Sie 0stattnew Number()
  • Verwenden Sie falsestattnew Boolean()
  • Verwenden Sie {}stattnew Object()
  • Verwenden Sie []stattnew Array()
  • Verwenden Sie /()/stattnew RegExp()
  • Verwenden Sie function (){}stattnew Function()

Beispiel

let x1 = "";             // new primitive string
let x2 = 0;              // new primitive number
let x3 = false;          // new primitive boolean
const x4 = {};           // new object
const x5 = [];           // new array object
const x6 = /()/;         // new regexp object
const x7 = function(){}; // new function object

Hüten Sie sich vor automatischen Typkonvertierungen

JavaScript ist lose typisiert.

Eine Variable kann alle Datentypen enthalten.

Eine Variable kann ihren Datentyp ändern:

Beispiel

let x = "Hello";     // typeof x is a string
x = 5;               // changes typeof x to a number

Beachten Sie, dass Zahlen versehentlich in Zeichenfolgen oder NaN(Not a Number) umgewandelt werden können.

Bei mathematischen Operationen kann JavaScript Zahlen in Strings umwandeln:

Beispiel

let x = 5 + 7;       // x.valueOf() is 12,  typeof x is a number
let x = 5 + "7";     // x.valueOf() is 57,  typeof x is a string
let x = "5" + 7;     // x.valueOf() is 57,  typeof x is a string
let x = 5 - 7;       // x.valueOf() is -2,  typeof x is a number
let x = 5 - "7";     // x.valueOf() is -2,  typeof x is a number
let x = "5" - 7;     // x.valueOf() is -2,  typeof x is a number
let x = 5 - "x";     // x.valueOf() is NaN, typeof x is a number

Das Subtrahieren einer Zeichenfolge von einer Zeichenfolge erzeugt keinen Fehler, sondern gibt NaN(Not a Number) zurück:

Beispiel

"Hello" - "Dolly"    // returns NaN

Verwenden Sie === Vergleich

Der ==Vergleichsoperator konvertiert vor dem Vergleich immer (in übereinstimmende Typen).

Der ===Operator erzwingt den Vergleich von Werten und Typ:

Beispiel

0 == "";        // true
1 == "1";       // true
1 == true;      // true

0 === "";       // false
1 === "1";      // false
1 === true;     // false

Parametervorgaben verwenden

Wenn eine Funktion mit einem fehlenden Argument aufgerufen wird, wird der Wert des fehlenden Arguments auf gesetzt undefined.

Undefinierte Werte können Ihren Code beschädigen. Es ist eine gute Angewohnheit, Argumenten Standardwerte zuzuweisen.

Beispiel

function myFunction(x, y) {
  if (y === undefined) {
    y = 0;
  }
}

ECMAScript 2015 erlaubt Standardparameter in der Funktionsdefinition:

function (a=1, b=1) { /*function code*/ }

Lesen Sie mehr über Funktionsparameter und Argumente unter Funktionsparameter


Beenden Sie Ihre Schalter mit Standardeinstellungen

Beenden Sie Ihre switchAnweisungen immer mit einem default. Auch wenn Sie denken, dass es nicht nötig ist.

Beispiel

switch (new Date().getDay()) {
  case 0:
    day = "Sunday";
    break;
  case 1:
    day = "Monday";
    break;
  case 2:
    day = "Tuesday";
    break;
  case 3:
    day = "Wednesday";
    break;
  case 4:
    day = "Thursday";
    break;
  case 5:
    day = "Friday";
    break;
  case 6:
    day = "Saturday";
    break;
  default:
    day = "Unknown";
}

Vermeiden Sie Number, String und Boolean als Objekte

Behandeln Sie Zahlen, Zeichenfolgen oder boolesche Werte immer als primitive Werte. Nicht als Objekte.

Das Deklarieren dieser Typen als Objekte verlangsamt die Ausführungsgeschwindigkeit und erzeugt unangenehme Nebenwirkungen:

Beispiel

let x = "John";             
let y = new String("John");
(x === y) // is false because x is a string and y is an object.

Oder noch schlimmer:

Beispiel

let x = new String("John");             
let y = new String("John");
(x == y) // is false because you cannot compare objects.

Vermeiden Sie die Verwendung von eval()

Die eval()Funktion wird verwendet, um Text als Code auszuführen. In fast allen Fällen sollte es nicht notwendig sein, es zu verwenden.

Da es erlaubt, beliebigen Code auszuführen, stellt es auch ein Sicherheitsproblem dar.