Ist JavaScript eine nicht typisierte Sprache?
Habe ich festgestellt, dass einige Leute nennen JavaScript "dynamisch, schwach typisierte" Sprache, aber einige sagen sogar "nicht typisiert"? Welche ist es wirklich?
InformationsquelleAutor der Frage Deniz Dogan | 2009-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
JavaScript ist nicht typisiert:
http://no.gd/p/untyped-20120205-235300.jpg
Sogar Brendan Eich so sagt. Auf Twitter antwortete er auf einen thread mit dieser Frage verknüpft:
Also das problem ist, dass es ein paar verschiedene Definitionen von nicht typisiert.
Einer definition wurde darüber gesprochen, in einem der oben genannten Antworten - die Laufzeit nicht tag-Werte und nur behandelt jeden Wert als bits. JavaScript hat tag-Werte und hat sich anders Verhalten, basierend auf diesen tags. Also JavaScript offensichtlich nicht in diese Kategorie passen.
Anderen definition ist von Programmiersprache Theorie (die Akademische Sache, Brendan beziehen). In diesem Bereich nicht typisiert bedeutet nur,alles gehört zu einer einzigen Art.
Warum? Denn eine Sprache wird nur ein Programm zu generieren, wenn es nachweisen kann, dass die Typen ausrichten (ein.k.ein. der Curry-Howard-Korrespondenz; Arten sind Theoreme, die Programme sind Beweise). Dies bedeutet, dass in einer nicht typisierten Sprache:
Im Gegensatz zu einer typisierten Sprache:
So dass Sie gehen, PLT, nicht typisiert bedeutet nur dynamisch typisierte und eingegeben bedeutet nur statisch typisierten. JavaScript ist definitiv nicht typisierte in dieser Kategorie.
Siehe auch:
InformationsquelleAutor der Antwort Brian McKenna
stark/schwach kann gedacht werden, in Verhältnis zu, wie der compiler, falls zutreffend, Griffe eingeben.
Stark typisierte bedeutet, dass es einen compiler, und es möchte, dass Sie eine explizite Umwandlung von string zu integer.
In jedem Fall, einige compiler-Funktionen können implizit verändern den Unterricht während der compile-Zeit, um Konvertierungen für Sie, wenn es bestimmen kann, dass ist die richtige Sache zu tun.
So weit, JavaScript kann kategorisiert werden als Nicht-Stark Typisiert. Das bedeutet entweder es ist schwach typisierte oder nicht typisierte.
dynamische/statische kann gedacht werden, in Bezug auf, wie die Sprache Anweisungen manipulieren Arten.
Dynamisch typisierte bedeutet, dass die Wert's Art erzwungen wird, aber die variable stellt einfach alle Werte eines beliebigen Typs.
Statisch typisierten bedeutet, dass die variable Typ ist stark durchgesetzt, und der Typ ist weniger Wert-also durchgesetzt.
So weit, JavaScript kann kategorisiert werden als Nicht-Statisch Typisierte. Auch scheint es, Dynamisch Typisiert, wenn Sie typisiert überhaupt. Wir müssen also sehen, was die Eingabe bedeutet.
Eingegeben bedeutet, dass die Sprache unterscheidet zwischen verschiedenen Typen wie stringAnzahlbooleanObjektarraynullundefined und so weiter. Auch jeder Betrieb ist verpflichtet, zu bestimmten Typen. So kann man nicht aufteilen eines integer durch eine string.
Nicht typisiert bedeutet, dass der Vorgang der Aufteilung integer von string Folge hätte, die Behandlung der ersten vier bytes des string als integer. Dies ist, weil Sie den nicht typisierten Operationen statt direkt auf bits, es gibt keine verschiedenen Arten zu beobachten. Das Ergebnis wird sein, etwas ganz unerwartetes:
Da JavaScript verhält sich entsprechend der definition der Eingegeben wird, muss es sein. Und deshalb muss es Dynamisch Typisiert und Schwach Typisiert.
Wenn jemand Ansprüche JavaScript nicht typisiert ist, ist es nur für Akademische Theorie, nicht für die praktische Anwendung.
InformationsquelleAutor der Antwort
JavaScript ist schwach typisiert. Es ist ganz sicher nicht "nicht typisiert", aber seine schwach typisierte Natur erlaubt es, eine Menge an Flexibilität in Bezug auf implizite Konvertierungen.
Beachten Sie, dass JavaScript auch dynamisch typisiert. Diese Methode der Typisierung erlaubt, was ist wissen, wie "duck typing".
Zum Vergleich betrachten, dass JavaScript nicht stark typisiert noch ist es statisch typisiert. Manchmal zu verstehen, was etwas nicht kann Ihnen helfen, besser zu sehen, was es ist.
InformationsquelleAutor der Antwort Andrew Hare
Des Autors Punkt JavaScript ist auch als Dynamisch typisierte. Wiki besagt, dass Dynamisch typisierte Sprachen sind Typ zur Laufzeit überprüft, statt in einem compiler, während die Schwach Typisiert ist, bezieht sich auf die Fähigkeit, zu ändern geben Sie on-the-fly in Ihrem code. Also ja, es ist sowohl Dynamisch typisiert UND Schwach typisiert.
InformationsquelleAutor der Antwort Darren Newton
Ist das problem hier, dass ist verwirrend Menge der Programmierer ist, dass Definitionen wie diese sind nicht standardisiert irgendwo. Der Begriff nicht typisierte Programmierspracheist unklar. Nicht, dass beziehen sich auf eine Sprache, die keine Datentypen oder eine Sprache, die eine lambda-Kalkül untypisierte Variante?
JavaScript/ECMAScript ist eine Typ system und alle seine Funktionen " domains akzeptiert jede Referenz Spezifikation Typ. Das bedeutet also, JavaScript ist eine single-Datentyp, in der Realität. Das ist eine Frage der Umsetzung, die ist wichtiger für den sehr fortgeschrittenen JavaScript-Programmierer. Die Durchschnittliche JavaScript-Programmierer kümmert sich nur um die abstrakte Sprache-Daten-Typendie angegeben wurden von ECMAScript.
Im Rahmen der täglichen Programmierer, nicht der Forscher oder theoretische Informatiker, der Begriff nicht typisiert ist ein Etikettenschwindel, weil die meisten Menschen nicht tun, lambda-Kalkül. So wird der Begriff verwirrt die Massen an und scheint zu erklären, dass JavaScript keine Datentypen, die einfach nicht wahr ist. Jeder, der jemals verwendet
typeof
weiß, dass JavaScript hat seine eigene Sprache-Daten-Typen:Erträge
ECMAScript definiert die folgenden Typen für die Sprache:
undefined
,null
,string
,boolean
,number
,object
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
Eine genauere Bezeichnung für JavaScript wäre implizit typisierte, dynamisch typisierte, oder schwach/schwach typisierten (oder eine Kombination davon), dass JavaScript verwendet geben Sie Zwang in einigen Fällen die macht der Typ implizit, weil Sie nicht haben, um geben Sie explizit den Typ der Variablen. Es fällt unter schwach typisiert ist, weil, im Gegensatz zu einigen Sprachen, die Unterscheidung zwischen float und integer usw, es verwendet einfach eine
number
Art umfassen alle zahlen, und macht Gebrauch von der Art Zwang bereits erwähnt[Abschnitt 9 von ECMAScript-Spezifikationen]im starken Kontrast zu einer stark typisierte Sprache, die würde, haben sehr spezifische Daten-Typen (z.B. müsste man angebenint
oderfloat
).Den Definitionen von statisch und dynamisch typisierte Sprachen sind nicht standardisiert, aber weder war die Größe von einem byte, als Computer begannen, sich zu entwickeln. Statische und dynamische Typisierung die meisten beziehen sich oft auf das Vorhandensein bestimmter Funktionen der Sprache. Einer von denen ist Typüberprüfung zur Laufzeitoder was heißt dynamische Typ-überprüfung. Wenn du bereits mit JavaScript, die Sie bereits wissen, dass es auf jeden Fall wartet erst zur Laufzeit zu überprüfen, Arten, die ist, warum Sie bekommen
TypeError
Ausnahmen während der Ausführung Ihres Codes. Beispiel hierIch denke, die top-stimmten Antwort ist verwirrend JavaScript-Funktionen " Polymorphismus mit Funktionen wird akzeptieren, dass Sie buchstäblich alles, was (als mit nicht typisierten Varianten des Lambda-Kalkül), die eine Verein Trugschluss.
InformationsquelleAutor der Antwort Alex W
Denken Sie daran, dass JavaScript erlaubt, Sie zu Fragen, was ist die
typeof(your_variable)
und vergleichen Arten:5==="5"
zurückfalse
.Also ich glaube nicht, Sie können es nennen, nicht typisiert.
Es ist dynamisch und (schätzungsweise) schwach typisiert.
Möchten Sie vielleicht wissen, verwendet es Duck typing (siehe andrew ' s link) und bietet OOP, obwohl Prototyping anstelle von Klassen und Vererbung.
InformationsquelleAutor der Antwort instanceof me
Während der Eingabe (Sie können Fragen, "typeof someVar" und erfahren Ihre spezifische Art, ist Sie sehr schwach.
Gegeben:
könnte man sagen, dass eine ist ein string. Allerdings, wenn Sie dann schreiben:
b ist ein int gleich 15, so gehandelt, genauso wie ein int. Natürlich kann man dann schreiben:
und c wird gleich "5Hello Welt", so ein wieder handeln wie ein string.
InformationsquelleAutor der Antwort James Curran