Javascript Spezialwissen...
- javascript
- quizwissen
- rant
Hallo alle,
Onkel Rolfs Plauderstunde…
<html>
<body>
<form name="foo">
</form>
<script language="javascript">
var foo1 = document.all("foo");
var foo2 = document.forms("foo");
</script>
</body>
<html>
Vorausgesetzt, dass dieses HTML-Fragment im Internet Explorer 4 landet - was ist daran technisch falsch (HTML Gestaltungsvorschriften haben damals eh keinen interessiert)?
Und was, wenn es in einem Browser von heute landet?
.
.
.
.
.
.
.
.
Antwort:
Das language-Attribut war im IE 4 sinnvoll, weil er auch VBScript konnte.
Und document.all(x) tut das gleiche wie document.all[x]. Weil in der Zeit vor DOM Level 1 document.all[x] die Kurzform von document.all.item(x) war und es üblich war, thing.item(x) durch thing(x) abzukürzen. Weshalb im IE4 auch document.forms("foo") funktioniert hat. Sagt Onkel Claude. In Chrome funktioniert es mit forms jedenfalls nicht, mit all aber schon. Weil die ECMAScript-Spec das so vorschreibt!!!1!elf!!
Warum stößt mir das gerade auf? Weil ich bei github in core-js herumstöbere, mir die isCallable Helperfunktion anschaue und mich wunderte, warum sie für document.all true meldet. 😭
Rolf
Solche historischen JavaScript-Eigenheiten sind schon herrlich – damals völlig normal, heute wirkt vieles davon fast wie eine Zeitreise. Besonders document.all ist ein schönes Beispiel dafür, wie alte Browser-Implementierungen noch lange ihre Spuren in modernen Standards hinterlassen. Und dass ausgerechnet so ein Detail beim Blick in core-js wieder auftaucht, kann ich gut nachvollziehen.
<Link-Spam entfernt>