Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Veraltete und obsolete Funktionen
Diese Seite listet Funktionen von JavaScript auf, die veraltet (d.h. noch verfügbar, aber zur Entfernung vorgesehen) und obsolet sind (d.h. nicht mehr verwendbar).
In diesem Artikel
Veraltete Funktionen
Diese veralteten Funktionen können noch verwendet werden, sollten jedoch mit Vorsicht genossen werden, da sie nicht von jedem JavaScript-Engine implementiert werden müssen. Sie sollten daran arbeiten, ihre Verwendung aus Ihrem Code zu entfernen.
Einige dieser veralteten Funktionen sind imAnhang B der ECMAScript-Spezifikation aufgeführt. Dieser Abschnitt wird als normativ optional beschrieben — das heißt, Hosts von Webbrowsern müssen diese Funktionen implementieren, während Nicht-Web-Hosts dies möglicherweise nicht tun. Diese Funktionen sind wahrscheinlich stabil, da ihre Entfernung Rückwärtskompatibilitätsprobleme verursachen und alte Websites beschädigen würde. (JavaScript hat das Designziel "Das Web nicht zerstören".) Trotzdem sind sie nicht plattformübergreifend portabel und werden möglicherweise nicht von allen Analysetools unterstützt, daher wird Ihnen geraten, sie nicht zu verwenden, wie die Einführung von Anhang B besagt:
… Alle in diesem Anhang spezifizierten Sprachfunktionen und Verhaltensweisen weisen eine oder mehrere unerwünschte Eigenschaften auf und würden ohne die Existenz von Altnutzung aus dieser Spezifikation entfernt werden. …
… Programmierer sollten diese Funktionen und Verhaltensweisen nicht verwenden oder deren Existenz beim Schreiben von neuem ECMAScript-Code annehmen. …
Einige andere, die im Hauptteil der Spezifikation stehen, sind ebenfalls als normativ optional gekennzeichnet und sollten nicht als gegeben vorausgesetzt werden.
HTML-Kommentare
JavaScript-Quellcode, sofern er als Skripte geparst wird, erlaubt HTML-ähnliche Kommentare, als ob das Skript Teil eines<script>-Tags ist.
Das folgende ist gültiges JavaScript, wenn es in einem Webbrowser (oder Node.js, das die V8-Engine von Chrome verwendet) ausgeführt wird:
<!-- commentconsole.log("a"); <!-- another commentconsole.log("b");--> More comment// Logs "a" and "b"<!-- und--> wirken beide wie//, d.h. als Beginn von Zeilenkommentaren.--> ist nur am Beginn einer Zeile gültig (um Mehrdeutigkeiten mit einem nachfolgenden 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 inErsetzungs-Strings:
$1–$9Klammerausdrücke, wenn vorhanden.
input,$_Der String, gegen den ein regulärer Ausdruck abgeglichen wird.
lastMatch,$&Der zuletzt gefundene Teilstring.
lastParen,$+Der letzte Klammerausdruck, falls vorhanden.
leftContext,$`Der Teilstring, der dem jüngsten Match voransteht.
rightContext,$'Der Teilstring, der dem jüngsten Match folgt.
Warnung:Vermeiden Sie die Verwendung dieser statischen Eigenschaften, da sieProbleme bei der Interaktion mit externem Code verursachen können!
Die Methodecompile() ist veraltet. Konstruieren Sie stattdessen eine neueRegExp-Instanz.
Die folgenden Regex-Syntaxen sind veraltet und nur imUnicode-unaware Modus verfügbar. Im Unicode-bewussten Modus sind sie alle Syntaxfehler:
- Lookahead-Bedingungen könnenQuantoren haben.
- Backreferences, die sich nicht auf eine bestehende Fängergruppe beziehen, werden zuveralteten Oktal-Escapes.
- InZeichenklassen werden Zeichenbereiche, bei denen eine Grenze eine Zeichenklasse ist, das
-zu einem literalen Zeichen. - Eine nicht erkannte Escape-Sequenz wird zu einem"Identitäts-Escape".
- Escape-Sequenzen innerhalb vonZeichenklassen der Form
\cX, bei denenXeine Zahl oder_ist, werden auf dieselbe Weise dekodiert wie beiASCII-Buchstaben:\c0ist dasselbe wie\cP, wenn es modulo 32 betrachtet wird. Außerdem wird, wenn ein\cXauftritt, bei demXnicht zu den anerkannten Zeichen gehört, der Backslash als literal angesehen. - Die Sequenz
\kinnerhalb eines Regex, das keinebenannten Fängergruppen hat, wird als Identitäts-Escape behandelt. - Die Syntaxzeichen
],{und}könnenwörtlich ohne Escape erscheinen, wenn sie nicht als Ende von Zeichenklassen- oder Quantifizierungsbegrenzer interpretiert werden können.
Function
- Die
caller-Eigenschaft von Funktionen und diearguments.callee-Eigenschaft sind veraltet und im strengen Modus nicht verfügbar. - Anstatt
argumentsals Eigenschaft einer Funktion zuzugreifen, sollten Sie dasarguments-Objekt innerhalb von Funktionsschließungen verwenden.
Object
- Die
Object.prototype.__proto__-Zugriffsmethoden sind veraltet. Verwenden Sie stattdessenObject.getPrototypeOfundObject.setPrototypeOf. Dies gilt nicht für den__proto__literalen Schlüssel in Objektdarstellungen. - Die Methoden
Object.prototype.__defineGetter__,Object.prototype.__defineSetter__,Object.prototype.__lookupGetter__undObject.prototype.__lookupSetter__sind veraltet. Verwenden Sie stattdessenObject.getOwnPropertyDescriptorundObject.defineProperty.
String
- HTML-Wrapper-Methoden wie
String.prototype.fontsizeundString.prototype.big. String.prototype.substrwird wahrscheinlich nicht bald entfernt, aber sie ist in Anhang B definiert und daher normativ optional.String.prototype.trimLeftundString.prototype.trimRightsollten durchString.prototype.trimStartundString.prototype.trimEndersetzt werden.
Date
- Die Methoden
getYear()undsetYear()sind vom Jahr-2000-Problem betroffen und wurden durchgetFullYearundsetFullYearersetzt. - Die Methode
toGMTString()ist veraltet. Verwenden Sie stattdessentoUTCString().
Escape-Sequenzen
- Oktale Escape-Sequenzen (\ gefolgt von einer, zwei oder drei Oktalziffern) sind in String- und regulären Ausdruckliteralen veraltet.
- Die Funktionen
escape()undunescape()sind veraltet. Verwenden SieencodeURI(),encodeURIComponent(),decodeURI()oderdecodeURIComponent(), um Escape-Sequenzen für Sonderzeichen zu kodieren und zu dekodieren.
Anweisungen
Diewith-Anweisung ist veraltet und im strengen Modus nicht verfügbar.
Initialisierer in denvar-Deklarationen von Schleifen-Headernfor...in sind veraltet und erzeugenSyntaxfehler im strengen Modus. Der Initialisierungs-Ausdruck wird ausgewertet und der Variable zugewiesen, aber der Wert würde bei der ersten Iteration der Schleife sofort erneut zugewiesen werden.
Normalerweise kann dercatch-Block einertry...catch-Anweisung keine Variablendeklaration mit demselben Namen wie die ancatch() gebundenen Variablen enthalten. Eine erweiterte Grammatik ermöglicht es demcatch-Block, eine mitvar deklarierte Variable mit demselben Namen wie dercatch-gebundene Bezeichner zu enthalten, jedoch nur, wenn diecatch-Bindung ein einfacher Bezeichner ist, keinDestrukturierungsmuster. Die Initialisierung und Zuweisung dieser Variablen würde jedoch nur auf dencatch-gebundenen Bezeichner wirken, anstelle der übergeordneten Variablen, was verwirrend sein könnte.
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); // 2try { 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); // 1Dies ist im Anhang B der Spezifikation aufgeführt und daher möglicherweise nicht überall implementiert. Vermeiden Sie Namenskonflikte zwischen demcatch-gebundenen Bezeichner und Variablen, die imcatch-Block deklariert sind.
Obsolete Funktionen
Diese obsoleten Funktionen wurden vollständig aus JavaScript entfernt und können nicht mehr in der angegebenen JavaScript-Version verwendet werden.
RegExp
Die folgenden sind nun Eigenschaften vonRegExp-Instanzen, nicht länger desRegExp-Konstruktors:
| Eigenschaft | Beschreibung |
|---|---|
global | Ob der reguläre Ausdruck auf alle möglichen Übereinstimmungen in einem String getestet wird oder nur auf die erste. |
ignoreCase | Ob Groß- und Kleinschreibung bei einem Match in einem String ignoriert wird. |
lastIndex | Der Index, bei dem das nächste Match startet. |
multiline (auch überRegExp.$*) | Ob in Strings über mehrere Zeilen hinweg gesucht wird. |
source | Der Text des Musters. |
DievalueOf()-Methode ist nicht mehr speziell fürRegExp. Sie verwendetObject.prototype.valueOf(), welche das Objekt selbst zurückgibt.
Function
- Die
arity-Eigenschaft von Funktionen ist obsolet. Verwenden Sie stattdessenlength.
Object
| Eigenschaft | Beschreibung | Alternative |
|---|---|---|
__count__ | Gibt die Anzahl der aufzählbaren Eigenschaften eines benutzerdefinierten Objekts zurück. | Object.keys() |
__parent__ | Verweist auf den Kontext eines Objekts. | Kein direkter Ersatz |
__iterator__ | Wird mitveralteten Iteratoren verwendet. | Symbol.iterator und die neuenIteration-Standards |
__noSuchMethod__ | Eine Methode, die aufgerufen wird, wenn eine nicht existente Eigenschaft als Methode aufgerufen wird. | Proxy |
Object.prototype.eval() | Bewertet einen String mit JavaScript-Code im Kontext des spezifizierten Objekts. | Kein direkter Ersatz |
Object.observe() | Asynchrones Beobachten von Änderungen an einem Objekt. | Proxy |
Object.unobserve() | Entfernt Beobachter. | Proxy |
Object.getNotifier() | Erstellt ein Benachrichtigungsobjekt, das ermöglicht, eine Änderungsbenachrichtigung mitObject.observe() synthetisch auszulösen. | Kein direkter Ersatz |
Object.prototype.watch() | Fügt eine Handler-Funktion an eine Eigenschaft an, die aufgerufen wird, wenn der Eigenschaft ein Wert zugewiesen wird. | Proxy |
Object.prototype.unwatch() | Entfernt Überwachungs-Handler von einer Eigenschaft. | Proxy |
String
- Nicht standardisierte, generische Methoden für Strings 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 markiert und in Firefox 68 entfernt. Sie können Methoden aufString.prototypezusammen mitFunction.callverwenden. String.prototype.quotewurde in Firefox 37 entfernt.- Nicht standardisierter
flags-Parameter inString.prototype.search,String.prototype.match, undString.prototype.replacesind 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 einerWeakMapzu durchlaufen.
Date
Date.prototype.toLocaleFormat(), welches ein Format-String verwendete, der im gleichen Format wie diestrftime()-Funktion in C erwartet wurde, ist obsolet. Verwenden SietoLocaleString()oderIntl.DateTimeFormat.
Array
- Nicht standardisierte, generische Methoden für Arrays 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 markiert und in Firefox 71 entfernt. Sie können Methoden aufArray.prototypezusammen mitFunction.callverwenden.
Number
Number.toInteger()ist obsolet. Verwenden SieMath.floor,Math.roundoder andere Methoden.
Proxy
Proxy.createundProxy.createFunctionsind obsolet. Verwenden Sie denProxy()-Konstruktor.- Die folgenden Traps sind obsolet:
hasOwn(bug 980565, Firefox 33).getEnumerablePropertyKeys(bug 783829, Firefox 37)getOwnPropertyNames(bug 1007334, Firefox 33)keys(bug 1007334, Firefox 33)
ParallelArray
ParallelArrayist obsolet.
Anweisungen
for each...inist obsolet. Verwenden Siefor...ofstattdessen.- Let-Blöcke und Let-Ausdrücke sind obsolet.
- Ausdrucksabschlüsse (
function () 1als Abkürzung fürfunction () { return 1; }) sind obsolet. Verwenden Sie regulärefunctionsoderarrow functions stattdessen.
Erwerb von Quelltext
DietoSource()-Methoden von Arrays, Zahlen, Strings usw. und dieuneval()-globale Funktion sind obsolet. Verwenden SietoString() oder schreiben Sie Ihre eigene Serialisierungsmethode.
Legacy-Generator und -Iterator
Legacy-Generator-Funktionsanweisungen und -Ausdrücke wurden entfernt. Die Syntax der alten Generatorfunktionen nutzt dasfunction-Schlüsselwort, welches automatisch zu einer Generatorfunktion wird, wenn es ein oder mehrereyield-Ausdrücke im Körper gibt — dies ist jetzt ein Syntaxfehler. Verwenden Siefunction*-Anweisungen undfunction*-Ausdrücke stattdessen.
Array-Komprehensionen und Generator-Komprehensionen sind entfernt.
// 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, vor Version 26, implementierte ein weiteres Iterato-Protokoll, das dem StandardIterator-Protokoll ähnlich ist. Ein Objekt ist ein veralteter Iterator, wenn es einenext()-Methode implementiert, die bei jedem Aufruf einen Wert erzeugt und am Ende der Iteration einStopIteration-Objekt auslöst. Dieses veraltete Iterator-Protokoll unterscheidet sich vom Standard-Iterator-Protokoll:
- Der Wert wurde direkt als Rückgabewert von Aufrufen an
next()zurückgegeben, anstatt dervalue-Eigenschaft desIteratorResult-Objekts. - Die Terminierung der Iteration wurde durch das Werfen eines
StopIteration-Objekts ausgedrückt, anstelle durch diedone-Eigenschaft desIteratorResult-Objekts.
Diese Funktion wurde zusammen mit demStopIteration-globale Konstruktor in Firefox 58+ entfernt. Für zukunftsgerichtete Verwendungen erwägen Sie,for...of-Schleifen und dasIterator-Protokoll zu verwenden.
Sharp-Variablen
Sharp-Variablen sind obsolet. Um zirkuläre Strukturen zu erstellen, verwenden Sie stattdessen temporäre Variablen.