Bei dieser Frage geht es um Semantik
Wenn ich Ihnen diese Daten gebe: 12
Welcher Art ist sie? Das können Sie nicht mit Sicherheit wissen. Es könnte ein Integer sein - es könnte ein Float sein - es könnte ein String sein. In diesem Sinne handelt es sich um "untypisierte" Daten.
Wenn ich Ihnen eine imaginäre Sprache an die Hand gebe, mit der Sie Operatoren wie "addieren", "subtrahieren" und "verketten" auf diese Daten und ein beliebiges anderes Stück Daten anwenden können, ist der "Typ" (für meine imaginäre Sprache) ziemlich irrelevant (Beispiel: vielleicht add(12, a)
ergibt 109
das ist 12
plus den Ascii-Wert von a
).
Lassen Sie uns kurz über C sprechen. Mit C können Sie so ziemlich alles tun, was Sie mit beliebigen Daten machen wollen. Wenn Sie eine Funktion verwenden, die zwei uint
s - Sie können jede beliebige Form verwenden und übergeben - und die Werte werden einfach als uint
s. In diesem Sinne ist C "untypisiert" (wenn man es auf diese Weise behandelt).
Aber - und damit komme ich zu Brendans Punkt - wenn ich Ihnen sagen würde: "Mein Alter ist 12
" - dann 12
hat einen Typ - zumindest wissen wir, dass er numerisch ist. Mit Kontext alles hat einen Typ - unabhängig von der Sprache.
Deshalb habe ich eingangs gesagt, dass Ihre Frage eine Frage der Semantik ist. Was ist die Bedeutung von "untypisiert"? Ich denke, Brendan hat den Nagel auf den Kopf getroffen, als er sagte "keine statischen Typen" - denn das ist alles, was es möglicherweise bedeuten kann. Der Mensch klassifiziert die Dinge von Natur aus in Typen. Wir wissen intuitiv, dass es einen grundlegenden Unterschied zwischen einem Auto und einem Affen gibt - ohne dass uns jemals beigebracht wurde, diese Unterscheidung zu treffen.
Um auf mein Beispiel vom Anfang zurückzukommen - eine Sprache, die sich "nicht um Typen kümmert" (per se), mag es erlauben, ein "Alter" und einen "Namen" zu "addieren", ohne einen Syntaxfehler zu produzieren... aber das bedeutet nicht, dass es eine logisch einwandfreie Operation ist.
Mit Javascript kann man alle möglichen verrückten Dinge tun, ohne sie als "Fehler" zu betrachten. Das bedeutet aber nicht, dass das, was Sie tun, logisch richtig ist. Das muss der Entwickler herausfinden.
Ist ein System/eine Sprache, das/die beim Kompilieren/Erstellen/Interpretieren keine Typsicherheit erzwingt, "untypisiert" oder "dynamisch typisiert"?
Semantik.
EDIT
Ich wollte hier etwas hinzufügen, weil einige Leute anscheinend auf "ja, aber Javascript hat einige "Typen"" hängen bleiben.
In meinem Kommentar zu der Antwort eines anderen Teilnehmers sagte ich:
In Javascript könnte ich Objekte haben, die ich als "Affen" aufgebaut habe, und Objekte, die ich als "Menschen" aufgebaut habe, und einige Funktionen könnten so gestaltet sein, dass sie nur auf "Menschen" wirken, andere nur auf "Affen" und wieder andere nur auf "Dinge mit Armen". Ob der Sprache jemals gesagt wurde, dass es eine solche Kategorie von Objekten wie "Dinge mit Armen" gibt, ist für Assembly ("untyped") genauso irrelevant wie für Javascript ("dynamic"). Es ist alles eine Frage der logischen Integrität - und der einzige Fehler wäre die Verwendung von etwas, das keine Arme hat, mit dieser Methode.
Wenn Sie also der Meinung sind, dass Javascript intern einen "Begriff von Typen" hat - und damit "dynamische Typen" - und glauben, dass sich dies irgendwie "deutlich von einem nicht typisierten System" unterscheidet, sollten Sie anhand des obigen Beispiels sehen, dass jeder "Begriff von Typen", den es intern hat, wirklich irrelevant ist.
Um den gleichen Vorgang mit C# durchzuführen, bräuchte ich zum Beispiel eine Schnittstelle namens ICreatureWithArms
oder etwas Ähnliches. Nicht so in Javascript - nicht so in C oder ASM.
Es ist offensichtlich, dass es keine Rolle spielt, ob Javascript überhaupt etwas von "Typen" versteht oder nicht.