Veraltete und obsolete Funktionen
Please take two minutes to fill out our short survey.
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 nutzbar).
Veraltete Funktionen
Diese veralteten Funktionen können noch verwendet werden, sollten jedoch mit Vorsicht eingesetzt werden, da deren Implementierung in keinem JavaScript-Engine garantiert ist. Sie sollten daran arbeiten, deren Nutzung aus Ihrem Code zu entfernen.
Einige dieser veralteten Funktionen sind in Abschnitt Annex B der ECMAScript-Spezifikation aufgeführt. Dieser Abschnitt ist als normativ optional beschrieben — Web-Browser-Hosts 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 ältere Websites unbrauchbar machen würde. (JavaScript hat das Designziel "Don't break the web".) Sie sind jedoch nicht plattformübergreifend portabel und werden möglicherweise nicht von allen Analysewerkzeugen unterstützt, daher wird empfohlen, sie nicht zu verwenden, wie in der Einleitung von Annex B angegeben:
… Alle in diesem Anhang beschriebenen Sprachfunktionen und Verhaltensweisen haben ein oder mehrere unerwünschte Merkmale und würden in Abwesenheit von Legacy-Nutzung aus dieser Spezifikation entfernt werden. …
… Programmierer sollten diese Funktionen und Verhaltensweisen nicht verwenden oder deren Existenz voraussetzen, wenn sie neuen ECMAScript-Code schreiben. …
Einige andere, obwohl sie sich im Hauptteil der Spezifikation befinden, sind ebenfalls als normativ optional markiert und sollten nicht angenommen werden.
HTML-Kommentare
JavaScript-Source, wenn als Skripte geparst, erlaubt HTML-ähnliche Kommentare, als ob das Skript Teil eines <script>
-Tags wäre.
Das Folgende ist gültiges JavaScript beim Ausführen in einem Web-Browser (oder Node.js, der die V8-Engine verwendet, die Chrome antreibt):
<!-- comment
console.log("a"); <!-- another comment
console.log("b");
--> More comment
// Logs "a" and "b"
<!--
und -->
beide verhalten sich wie //
, d.h. sie beginnen Zeilenkommentare. -->
ist nur am Anfang einer Zeile gültig (um Mehrdeutigkeiten mit einem postfix-Decrement 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 Nutzung in Ersetzungsstrings:
$1–$9
-
Parenthesierte Teilzeichenfolgen, wenn vorhanden.
input
,$_
-
Die Zeichenfolge, gegen die ein regulärer Ausdruck gematcht wird.
lastMatch
,$&
-
Die zuletzt gematchte Teilzeichenfolge.
lastParen
,$+
-
Der letzte geparenthesierten Teilzeichenfolgentreffer, wenn vorhanden.
leftContext
,$`
-
Die Teilzeichenfolge vor dem jüngsten Treffer.
rightContext
,$'
-
Die Teilzeichenfolge nach dem jüngsten Treffer.
Warnung: Vermeiden Sie die Verwendung dieser statischen Eigenschaften, da sie Probleme beim Umgang mit externem Code verursachen können!
Die Methode compile()
ist veraltet. Konstruieren Sie stattdessen eine neue RegExp
-Instanz.
Die folgenden regulären Ausdrücke-Syntaxen sind veraltet und nur im Unicode-unaware mode verfügbar. Im Unicode-aware mode sind sie alle Syntaxfehler:
- Lookahead Assertions können Quantoren haben.
- Rückverweise, die sich nicht auf eine vorhandene Erfassen-Gruppe beziehen, werden zu alten Oktalauswertungen.
- In Zeichenklassen ist ein Zeichenbereich, bei dem eine Grenze eine Zeichenklasse ist, das
-
als ein literales Zeichen. - Eine nicht erkannte Escape-Sequenz wird zu einer "Identitäts-Escape".
- Escape-Sequenzen innerhalb von Zeichenklassen der Form
\cX
, wobeiX
eine Zahl oder_
ist, werden auf die gleiche Weise dekodiert wie diejenigen mit ASCII-Buchstaben:\c0
ist dasselbe wie\cP
, wenn modulo 32 betrachtet. Außerdem, wenn die Form\cX
irgendwo auftritt, woX
nicht zu den anerkannten Zeichen gehört, wird der Backslash als literales Zeichen behandelt. - Die Sequenz
\k
innerhalb eines Regex, das keine benannten Erfassungsgruppen hat, wird als Identitäts-Escape behandelt. - Die Syntaxzeichen
]
,{
, und}
dürfen wörtlich erscheinen, ohne dass sie maskiert werden, wenn sie nicht als Ende einer Zeichenklasse oder Quantifizierer-Delimiter interpretiert werden können.
Funktion
- Die
caller
-Eigenschaft von Funktionen und diearguments.callee
-Eigenschaft sind veraltet und im Strict-Modus nicht verfügbar. - Anstelle des Zugriffs auf
arguments
als Eigenschaft einer Funktion sollten Sie dasarguments
-Objekt innerhalb von Funktionsabschlüssen verwenden.
Objekt
- Die
Object.prototype.__proto__
Accessoren sind veraltet. Verwenden Sie stattdessenObject.getPrototypeOf
undObject.setPrototypeOf
. Dies gilt nicht für den__proto__
-Schlüssel in objektliteralen. - Die Methoden
Object.prototype.__defineGetter__
,Object.prototype.__defineSetter__
,Object.prototype.__lookupGetter__
, undObject.prototype.__lookupSetter__
sind veraltet. Verwenden Sie stattdessenObject.getOwnPropertyDescriptor
undObject.defineProperty
.
String
- HTML-Wrapper-Methoden wie
String.prototype.fontsize
undString.prototype.big
. String.prototype.substr
wird wahrscheinlich nicht so bald entfernt, aber es ist in Annex B definiert und daher normativ optional.String.prototype.trimLeft
undString.prototype.trimRight
sollten durchString.prototype.trimStart
undString.prototype.trimEnd
ersetzt werden.
Datum
- Die Methoden
getYear()
undsetYear()
sind vom Jahr-2000-Problem betroffen und wurden durchgetFullYear
undsetFullYear
ersetzt. - Die
toGMTString()
-Methode ist veraltet. Verwenden Sie stattdessentoUTCString()
.
Escape-Sequenzen
- Oktale Escape-Sequenzen (\ gefolgt von einer, zwei oder drei Oktalziffern) sind in String- und regulären Ausdruck-Literalen veraltet.
- Die Funktionen
escape()
undunescape()
sind veraltet. Verwenden SieencodeURI()
,encodeURIComponent()
,decodeURI()
, oderdecodeURIComponent()
, um Escape-Sequenzen für Sonderzeichen zu kodieren und zu dekodieren.
Anweisungen
Die with
-Anweisung ist veraltet und im Strict-Modus nicht verfügbar.
Initialisierer in var
-Deklarationen von for...in
-Schleifen-Headern sind veraltet und führen im Strict-Modus zu Syntaxfehlern. Der Initialisierer-Ausdruck wird ausgewertet und der Variable zugewiesen, aber der Wert wird sofort bei der ersten Iteration der Schleife neu zugewiesen.
Normalerweise kann der catch
-Abschnitt einer try...catch
-Anweisung keine Variablendeklarationen mit demselben Namen wie die im catch()
gebundenen Variablen enthalten. Eine Erweiterungsgrammatik ermöglicht es dem catch
-Abschnitt, eine var
deklarierte Variable mit demselben Namen wie dem catch
-gebundenen Identifikator zu enthalten, aber nur, wenn die catch
-Bindung ein einfacher Identifikator und kein Destrukturierungsmuster ist. Allerdings würde die Initialisierung und Zuweisung dieser Variablen nur auf den catch
-gebundenen Identifikator wirken, anstatt auf die obere Variablenebene, und das Verhalten könnte verwirrend sein.
var a = 2;
try {
throw 42;
} catch (a) {
var a = 1; // This 1 is assigned to the caught `a`, not the outer `a`.
}
console.log(a); // 2
try {
throw 42;
// 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 in Annex B der Spezifikation aufgeführt und kann daher nicht überall implementiert sein. Vermeiden Sie jegliche Namenskonflikte zwischen dem catch
-gebundenen Identifikator und in dem catch
-Block deklarierten Variablen.
Obsolete Funktionen
Diese obsoleten Funktionen wurden vollständig aus JavaScript entfernt und können ab der angegebenen JavaScript-Version 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 die Groß- und Kleinschreibung während eines Suchvorgangs ignoriert wird. |
lastIndex |
Der Index, an dem der nächste Suchvorgang beginnen soll. |
multiline (auch über RegExp.$* ) |
Ob in Strings über mehrere Zeilen hinweg gesucht werden soll. |
source |
Der Text des Musters. |
Die Methode valueOf()
ist nicht mehr speziell für RegExp
. Sie verwendet Object.prototype.valueOf()
, die sich selbst zurückgibt.
Funktion
- Die
arity
-Eigenschaft von Funktionen ist obsolet. Verwenden Sie stattdessenlength
.
Objekt
Eigenschaft | Beschreibung | Alternative |
---|---|---|
__count__ |
Gibt die Anzahl der direkt auf einem benutzerdefinierten Objekt vorhandenen aufzählbaren Eigenschaften zurück. | Object.keys() |
__parent__ |
Zeigt auf den Kontext eines Objekts. | Keine direkte Ersatzlösung |
__iterator__ |
Wird mit Legacy-Iteratoren verwendet. | Symbol.iterator und die neuen Iterationsprotokolle |
__noSuchMethod__ |
Eine Methode, die aufgerufen wird, wenn eine nicht vorhandene Eigenschaft als Methode aufgerufen wird. | Proxy |
Object.prototype.eval() |
Führt einen String aus JavaScript-Code im Kontext des angegebenen Objekts aus. | Keine direkte Ersatzlösung |
Object.observe() |
Asynchrones Beobachten von Änderungen an einem Objekt. | Proxy |
Object.unobserve() |
Entfernt Beobachter. | Proxy |
Object.getNotifier() |
Erstellt ein Notifizierungsobjekt, das es ermöglicht, beobachtbare Änderungen mit Object.observe() synthetisch auszulösen. |
Keine direkte Ersatzlösung |
Object.prototype.watch() |
Eine Handler-Rückruffunktion an eine Eigenschaft anhängen, die aufgerufen wird, wenn der Eigenschaft ein Wert zugewiesen wird. | Proxy |
Object.prototype.unwatch() |
Entfernt watch -Handler bei einer Eigenschaft. |
Proxy |
String
- Nicht-standardisierte generische String-Methoden wie
String.slice(myStr, 0, 12)
,String.replace(myStr, /\./g, "!")
etc. wurden in Firefox 1.5 (JavaScript 1.6) eingeführt, in Firefox 53 veraltet und in Firefox 68 entfernt. Sie können Methoden aufString.prototype
zusammen mitFunction.call
verwenden. String.prototype.quote
wurde in Firefox 37 entfernt.- Nicht-standardisierter
flags
-Parameter inString.prototype.search
,String.prototype.match
, undString.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 einemWeakMap
zu durchsuchen.
Datum
Date.prototype.toLocaleFormat()
, das eine Formatzeichenkette im selben Format wie diestrftime()
-Funktion in C verwendete, ist obsolet. Verwenden SietoLocaleString()
oderIntl.DateTimeFormat
stattdessen.
Array
- Nicht-standardisierte generische Array-Methoden wie
Array.slice(myArr, 0, 12)
,Array.forEach(myArr, myFn)
etc. wurden in Firefox 1.5 (JavaScript 1.6) eingeführt, in Firefox 68 veraltet und in Firefox 71 entfernt. Sie können Methoden aufArray.prototype
zusammen mitFunction.call
verwenden.
Number
Number.toInteger()
ist obsolet. Verwenden Sie stattdessenMath.floor
,Math.round
, oder andere Methoden.
Proxy
Proxy.create
undProxy.createFunction
sind obsolet. Verwenden Sie denProxy()
-Konstruktor stattdessen.- 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
ParallelArray
ist obsolet.
Anweisungen
for each...in
ist obsolet. Verwenden Siefor...of
stattdessen.- Let-Blöcke und Let-Ausdrücke sind obsolet.
- Ausdrucksabschlüsse (
function () 1
als Abkürzung fürfunction () { return 1; }
) sind obsolet. Verwenden Sie reguläreFunktionen
oder Pfeilfunktionen stattdessen.
Erhalt von Quelltext
Die toSource()
-Methoden für 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 wurden entfernt. Die Legacy-Generator-Funktionssyntax nutzt das function
-Schlüsselwort, das automatisch zu einer Generator-Funktion wird, wenn es eine oder mehrere yield
-Ausdrücke im Körper gibt — das ist jetzt ein Syntaxfehler. Verwenden Sie function*
-Anweisungen und function*
-Ausdrücke stattdessen.
Array-Kompromisse und Generator-Kompromisse 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 implementierte vor Version 26 ein anderes Iterator-Protokoll, das dem Standard-Protokoll Iterator protocol ähnlich ist. Ein Objekt ist ein Legacy-Iterator, wenn es eine Methode next()
implementiert, die bei jedem Aufruf einen Wert erzeugt und am Ende der Iteration ein StopIteration
-Objekt wirft. Dieses Legacy-Iterator-Protokoll unterscheidet sich vom Standard-Iterator-Protokoll:
- Der Wert wurde direkt als Rückgabewert von Aufrufen an
next()
zurückgegeben, anstatt dievalue
-Eigenschaft desIteratorResult
-Objekts. - Der Abschluss der Iteration wurde durch das Werfen eines
StopIteration
-Objekts ausgedrückt, anstatt durch diedone
-Eigenschaft desIteratorResult
-Objekts.
Dieses Feature, zusammen mit dem globalen Konstruktor StopIteration
, wurde in Firefox 58+ entfernt. Für zukunftsorientierte Anwendungen ziehen Sie in Betracht, for...of
-Schleifen und das Iterator-Protokoll zu verwenden.
Scharfe Variablen
Scharfe Variablen sind veraltet. Um zirkuläre Strukturen zu erstellen, verwenden Sie stattdessen temporäre Variablen.