Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Veraltete und obsolet gewordene Funktionen

Diese Seite listet JavaScript-Funktionen auf, die als veraltet (d.h. noch verfügbar, aber für die Entfernung geplant) und obsolet (d.h. nicht mehr nutzbar) gelten.

Veraltete Funktionen

Diese veralteten Funktionen können noch verwendet werden, sollten jedoch mit Vorsicht verwendet werden, da sie nicht in allen JavaScript-Engines implementiert sein müssen. Sie sollten daran arbeiten, deren Verwendung aus Ihrem Code zu entfernen.

Einige dieser veralteten Funktionen sind im Abschnitt Anhang B der ECMAScript-Spezifikation aufgeführt. Dieser Abschnitt wird als normativ optional beschrieben — das heißt, Webbrowser-Hosts müssen diese Funktionen implementieren, während Nicht-Web-Hosts dies möglicherweise nicht tun. Diese Funktionen sind wahrscheinlich stabil, da deren Entfernung Rückwärtskompatibilitätsprobleme verursachen und ältere Websites beeinträchtigen würde. (JavaScript hat das Designziel "das Web nicht kaputt machen".) Dennoch sind sie nicht plattformübergreifend tragbar und werden möglicherweise nicht von allen Analysetools unterstützt, daher wird geraten, sie nicht zu verwenden, wie die Einführung von Anhang B bemerkt:

… Alle in diesem Anhang spezifizierten Sprachmerkmale und Verhaltensweisen weisen eine oder mehrere unerwünschte Eigenschaften auf und würden ohne die Existenz von Altnutzungen aus dieser Spezifikation entfernt werden. …

… Programmierer sollten diese Merkmale und Verhaltensweisen beim Schreiben neuen ECMAScript-Codes nicht verwenden oder deren Existenz voraussetzen. …

Einige andere, obwohl sie sich im Hauptteil der Spezifikation befinden, sind ebenfalls als normativ optional gekennzeichnet und sollten nicht als gegeben vorausgesetzt werden.

HTML-Kommentare

JavaScript-Quellcode, wenn er als Skripte geparst wird, erlaubt HTML-ähnliche Kommentare, als ob das Skript Teil eines <script> Tags wäre.

Folgendes ist gültiges JavaScript, wenn es in einem Webbrowser (oder Node.js, das die V8-Engine von Chrome nutzt) ausgeführt wird:

js
<!-- comment
console.log("a"); <!-- another comment
console.log("b");
--> More comment
// Logs "a" and "b"

<!-- und --> verhalten sich beide wie //, d.h. sie starten Zeilenkommentare. --> ist nur am Anfang einer Zeile gültig (um Verwirrung mit einem Postfix-Abzugsoperator gefolgt von einem Größer-als-Operator zu vermeiden), während <!-- überall in der Zeile vorkommen kann.

RegExp

Die folgenden Eigenschaften sind veraltet. Dies beeinflusst nicht ihre Verwendung in Ersatz-Strings:

$1–$9

Eingeschlossene Substring-Übereinstimmungen, falls vorhanden.

input, $_

Der String, gegen den ein regulärer Ausdruck abgeglichen wird.

lastMatch, $&

Der zuletzt abgeglichene Substring.

lastParen, $+

Die zuletzt eingeschlossene Substring-Übereinstimmung, falls vorhanden.

leftContext, $`

Der Substring, der der letzten Übereinstimmung vorausgeht.

rightContext, $'

Der Substring, der der letzten Übereinstimmung folgt.

Warnung: Vermeiden Sie die Verwendung dieser statischen Eigenschaften, da sie Probleme im Umgang mit externem Code verursachen können!

Die Methode compile() ist veraltet. Erstellen Sie stattdessen eine neue RegExp-Instanz.

Die folgenden Regex-Syntaxen sind veraltet und nur im Unicode-unaware Modus verfügbar. Im Unicode-aware Modus sind sie alle Syntaxfehler:

  • Lookahead assertions können Quantifier haben.
  • Backreferences, die sich nicht auf eine existierende Erfassungsgruppe beziehen, werden zu Legacy-Oktalescape-sequenzen.
  • In Zeichenklassen, Zeichenbereiche, bei denen eine Grenze eine Zeichenklasse ist, machen das - zu einem literalen Zeichen.
  • Eine Escape-Sequenz, die nicht erkannt wird, wird zu einem "Identitäts-Escape".
  • Escape-Sequenzen innerhalb von Zeichenklassen der Form \cX, wobei X eine Zahl oder _ ist, werden auf die gleiche Weise decodiert wie diejenigen mit ASCII-Buchstaben: \c0 ist genauso wie \cP, wenn mod 32 genommen wird. Außerdem, wenn die Form \cX irgendwo auftritt, wo X nicht eines der erkannten Zeichen ist, wird der Backslash als ein literales Zeichen behandelt.
  • Die Sequenz \k innerhalb eines Regexes, der keine benannten Erfassungsgruppen hat, wird als ein Identitäts-Escape betrachtet.
  • Die Syntaxzeichen ], {, und } können literal unescaped erscheinen, wenn sie nicht als Ende einer Zeichenklasse oder als Quantifizierer-Delimitatoren interpretiert werden können.

Function

  • Die caller-Eigenschaft von Funktionen und die arguments.callee-Eigenschaft sind veraltet und in strengem Modus nicht verfügbar.
  • Anstelle des Zugriffs auf arguments als Eigenschaft einer Funktion sollten Sie das arguments-Objekt innerhalb von Funktionsabschlüssen verwenden.

Object

String

Date

Escape-Sequenzen

Anweisungen

Die with-Anweisung ist veraltet und im strengen Modus nicht verfügbar.

Initialisierer in var-Deklarationen von for...in-Schleifen sind veraltet und erzeugen Syntaxfehler im strengen Modus. Die Initialisiererausdrücke werden ausgewertet und der Variablen zugeordnet, aber der Wert würde bei der ersten Schleifeniteration sofort neu zugeordnet werden.

Normalerweise kann der catch-Block einer try...catch-Anweisung keine Variablendeklaration mit dem gleichen Namen enthalten wie die im catch() gebundenen Variablen. Eine erweiterte Grammatik erlaubt es dem catch-Block, eine mit var deklarierte Variable mit dem gleichen Namen wie der im catch gebundene Bezeichner zu enthalten, aber nur, wenn die catch-Bindung ein einfacher Bezeichner ist und kein Destructuring-Muster. Diese Variable wird jedoch nur auf den im catch gebundenen Bezeichner initialisiert und zugewiesen, anstatt auf die oberste Gültigkeitsbereichsvariable, und das Verhalten könnte verwirrend sein.

js
var a = 2;
try {
  throw new Error();
} catch (a) {
  var a = 1; // This 1 is assigned to the caught `a`, not the outer `a`.
}
console.log(a); // 2

try {
  throw new Error();
  // Note: identifier changed to `err` to avoid conflict with
  // the inner declaration of `a`.
} catch (err) {
  var a = 1; // This 1 is assigned to the upper-scope `a`.
}
console.log(a); // 1

Dies ist im Anhang B der Spezifikation aufgeführt und daher möglicherweise nicht überall implementiert. Vermeiden Sie Namenskonflikte zwischen dem im catch gebundenen Bezeichner und Variablen, die im catch-Block deklariert sind.

Obsolete Funktionen

Diese obsoleten Funktionen wurden vollständig aus JavaScript entfernt und können ab der angegebenen Version von JavaScript nicht mehr verwendet werden.

RegExp

Die folgenden sind jetzt Eigenschaften von RegExp-Instanzen, nicht mehr des RegExp-Konstruktors:

Eigenschaft Beschreibung
global Ob der reguläre Ausdruck gegen alle möglichen Übereinstimmungen in einem String getestet wird oder nur gegen die erste.
ignoreCase Ob beim Versuch einer Übereinstimmung in einem String die Groß-/Kleinschreibung ignoriert wird.
lastIndex Der Index, bei dem mit dem nächsten Abgleich begonnen werden soll.
multiline (auch über RegExp.$*) Ob in String-Übereinstimmungen über mehrere Zeilen hinweg gesucht werden soll.
source Der Text des Musters.

Die Methode valueOf() ist nicht mehr speziell für RegExp. Sie nutzt Object.prototype.valueOf(), das sich selbst zurückgibt.

Function

  • Die arity-Eigenschaft von Funktionen ist obsolet. Verwenden Sie stattdessen length.

Object

Eigenschaft Beschreibung Alternative
__count__ Gibt die Anzahl der direkt verfügbaren aufzählbaren Eigenschaften auf einem benutzerdefinierten Objekt zurück. Object.keys()
__parent__ Verweist auf den Kontext eines Objekts. Keine direkte Ersatzmethode
__iterator__ Wurde mit Legacy-Iteratoren verwendet. Symbol.iterator und die neuen Iteration-Protokolle
__noSuchMethod__ Eine Methode, die aufgerufen wird, wenn eine nicht vorhandene Eigenschaft als Methode aufgerufen wird. Proxy
Object.prototype.eval() Wertet einen JavaScript-Code-String im Kontext des angegebenen Objekts aus. Keine direkte Ersatzmethode
Object.observe() Asynchrones Beobachten von Änderungen an einem Objekt. Proxy
Object.unobserve() Entfernt Beobachter. Proxy
Object.getNotifier() Erzeugt ein Notifier-Objekt, das es ermöglicht, eine Änderungsbeobachtung mit Object.observe() synthetisch auszulösen. Keine direkte Ersatzmethode
Object.prototype.watch() Hängt einen Callback-Handler an eine Eigenschaft, der aufgerufen wird, wenn der Eigenschaft zugewiesen wird. Proxy
Object.prototype.unwatch() Entfernt Watch-Handler von einer Eigenschaft. Proxy

String

  • Nicht standardisierte String-generische Methoden wie String.slice(myStr, 0, 12), String.replace(myStr, /\./g, "!") usw. wurden in Firefox 1.5 (JavaScript 1.6) eingeführt, in Firefox 53 als veraltet erklärt und in Firefox 68 entfernt. Sie können Methoden auf String.prototype zusammen mit Function.call verwenden.
  • String.prototype.quote wurde in Firefox 37 entfernt.
  • Nicht standardisierte flags-Parameter in String.prototype.search, String.prototype.match, und String.prototype.replace sind obsolet.

WeakMap

  • WeakMap.prototype.clear() wurde in Firefox 20 hinzugefügt und in Firefox 46 entfernt. Es ist nicht möglich, alle Schlüssel in einem WeakMap zu durchlaufen.

Date

  • Date.prototype.toLocaleFormat(), das ein Formatstring im gleichen Format verwendete, das von der Funktion strftime() in C erwartet wird, ist obsolet. Verwenden Sie toLocaleString() oder Intl.DateTimeFormat.

Array

  • Nicht standardisierte Array-generische Methoden wie Array.slice(myArr, 0, 12), Array.forEach(myArr, myFn) usw. wurden in Firefox 1.5 (JavaScript 1.6) eingeführt, in Firefox 68 als veraltet erklärt und in Firefox 71 entfernt. Sie können Methoden auf Array.prototype zusammen mit Function.call verwenden.
Eigenschaft Beschreibung Alternative
Array.observe() Asynchrones Beobachten von Änderungen an Arrays. Proxy
Array.unobserve() Entfernt Beobachter. Proxy

Number

  • Number.toInteger() ist obsolet. Verwenden Sie statt dessen Math.floor, Math.round oder andere Methoden.

Proxy

  • Proxy.create und Proxy.createFunction sind obsolet. Verwenden Sie den Proxy()-Konstruktor.
  • Die folgenden Traps sind obsolet:

ParallelArray

  • ParallelArray ist obsolet.

Anweisungen

  • for each...in ist obsolet. Verwenden Sie for...of.
  • Let-Blöcke und Let-Ausdrücke sind obsolet.
  • Ausdrückungsabschlüsse (function () 1 als Kurzform von function () { return 1; }) sind obsolet. Verwenden Sie reguläre Funktionen oder Pfeilfunktionen.

Abrufen des Quelltexts

Die toSource()-Methoden von Arrays, Zahlen, Strings usw. und die globale Funktion uneval() sind obsolet. Verwenden Sie toString(), oder schreiben Sie Ihre eigene Serialisierungsmethode.

Legacy-Generator und -Iterator

Legacy-Generator-Funktionsanweisungen und Legacy-Generator-Funktionsausdrücke sind entfernt. Die Syntax der Legacy-Generator-Funktion verwendet das function-Schlüsselwort, das automatisch zu einer Generator-Funktion wird, wenn es eine oder mehrere yield-Ausdrücke im Körper gibt — dies ist jetzt ein Syntaxfehler. Verwenden Sie function*-Anweisungen und function*-Ausdrücke anstelle dessen.

Array-Konstruktionen und Generator-Konstruktionen sind entfernt.

js
// Legacy array comprehensions
[for (x of iterable) x]
[for (x of iterable) if (condition) x]
[for (x of iterable) for (y of iterable) x + y]

// Legacy generator comprehensions
(for (x of iterable) x)
(for (x of iterable) if (condition) x)
(for (x of iterable) for (y of iterable) x + y)

Firefox implementierte vor Version 26 ein weiteres Iterationsprotokoll, das dem Standard Iterators-Protokoll ähnelt. Ein Objekt ist ein Legacy-Iterator, wenn es eine next()-Methode implementiert, die bei jedem Aufruf einen Wert geliefert und ein StopIteration-Objekt am Ende der Iteration ausgelöst hat. Dieses Legacy-Iterator-Protokoll unterscheidet sich vom Standard-Iterator-Protokoll:

  • Der Wert wurde direkt als Rückgabewert der next()-Aufrufe zurückgegeben, anstatt der value-Eigenschaft des IteratorResult-Objekts.
  • Die Beendigung der Iteration wurde durch das Auswerfen eines StopIteration-Objekts erreicht, anstatt durch die done-Eigenschaft des IteratorResult-Objekts.

Diese Funktion, zusammen mit dem StopIteration globalen Konstruktor, wurde in Firefox 58+ entfernt. Für zukunftsorientierte Verwendungen sollten Sie die for...of-Schleifen und das Iterator-Protokoll nutzen.

Sharp-Variablen

Sharp-Variablen sind obsolet. Verwenden Sie stattdessen temporäre Variablen, um zirkuläre Strukturen zu erstellen.