Die folgenden zwei verschiedenen Codefragmente scheinen mir gleichwertig zu sein:
var myArray = Array();
myArray['A'] = "Athens";
myArray['B'] = "Berlin";
und
var myObject = {'A': 'Athens', 'B':'Berlin'};
weil sie sich beide gleich verhalten und auch typeof(myArray) == typeof(myObjects)
(beide ergeben 'Objekt').
Gibt es einen Unterschied zwischen diesen Varianten?
quelle
title
,description
unditems
Eigenschaften. Es hängt alles davon ab, wie gut Sie die Sprache kennen und wie Sie sie verwenden.In JS-Arrays handelt es sich um Objekte, die nur geringfügig geändert wurden (mit einigen weiteren Funktionen).
Funktionen wie:
quelle
Ich denke, ich bin zu metaphorisch und kryptisch mit vorheriger Antwort. Klarstellung folgt.
Eine Instanz von Array, Boolean, Date, Function, Number, RegExp, String ist ein Objekt, das jedoch um Methoden und Eigenschaften erweitert wurde, die für jeden Typ spezifisch sind. Ein Array verfügt beispielsweise über eine vordefinierte
length
Eigenschaft, während dies bei generischen Objekten nicht der Fall ist .Anzeigen
Eigentlich unterscheidet der FF-Gecko-Interpreter auch zwischen Arrays und generischen Objekten mit deutlichen Unterschieden bei der Bewertung von Sprachkonstrukten.
Anzeigen
und
0 1 2 a
und0 1 2 a
.In Bezug auf die Aussage, dass alle Objekte Funktionen sind:
Es ist weder syntaktisch noch semantisch korrekt, eine beliebige Objektinstanz als Funktion wie
123()
oder"abc"()
oder[]()
oder{}()
oderobj()
woobj
ein anderer Typ als istFunction
, zu verwenden, sodass ein beliebiges Objekt INSTANCE kein a istFunction
. Allerdings ist es eine Aufgabe gegebenobj
und es Typ alsArray, Boolean, Date, ...
, wie kamobj
kommen als zu seinArray, Boolean, Date, ...
? Was ist einArray, Boolean, Date, ...
?Anzeigen
In jedem Fall manifestiert sich der Objekttyp ohne Mehrdeutigkeit als
function
Definition, daher die Aussage, dass alle Objekte Funktionen sind! (Die Zunge in der Wange ist, dass ich absichtlich die Unterscheidung einer Objektinstanz mit der ihres Typs verdeckt und verwischt habe! Dennoch zeigt dies "Sie können keine ohne die andere haben", Objekt und Funktion! Die Großschreibung betont den Typ als gegen Instanz.)Sowohl ein Funktions- als auch ein Objektparadigma scheinen für die Programmierung und Implementierung der integrierten Grundelemente auf niedriger Ebene des JS-Interpreters wie
Math
undJSON
und von grundlegender Bedeutung zu seintrue
.Anzeigen
Zum Zeitpunkt der Entwicklung von Javascript war ein objektzentrierter Programmierstil (OOPs - Object Oriented Programming Style - das "'s" ist mein eigenes Wortspiel!) In Mode und der Interpreter wurde ähnlich mit Java getauft, um ihm mehr Glaubwürdigkeit zu verleihen . Funktionale Programmiertechniken wurden zu abstrakteren und esoterischeren Untersuchungen verbannt, die die Theorien von Automaten, rekursiven Funktionen, formalen Sprachen usw. studierten, und als solche nicht so schmackhaft. Die Stärken dieser formalen Überlegungen zeigen sich jedoch deutlich in Javascript, insbesondere in der Gecko-Engine von FF (dh
.toSource()
).Die Objektdefinition für Funktion ist besonders zufriedenstellend, da sie als Wiederholungsrelation definiert ist! definiert mit seiner eigenen Definition!
function Function() { [native code] }
und da eine Funktion ein Objekt ist, gilt das gleiche Gefühl für
function Object() { [native code] }
.Die meisten anderen Definitionen basieren auf einem statischen Endwert. Ist
eval()
jedoch ein besonders leistungsfähiges Grundelement und daher kann ein String auch beliebige Funktionen einbetten.Beachten Sie erneut, dass die oben verwendete Umgangssprache den Objekttyp und die Instanzunterscheidung verdeckt.
quelle
Alles in JavaScript ist ein Objekt außer primitiven Typen.
Der Code
Erstellt eine Instanz des Array-Objekts während
Erstellt eine Instanz des Objektobjekts.
Versuchen Sie den folgenden Code
Sie werden also sehen, dass der Unterschied in der Art des Objektkonstruktors liegt.
Die Instanz des Array-Objekts enthält alle Eigenschaften und Methoden des Array-Prototyps.
quelle
quelle
Sie können fast allem in Javascript benannte Eigenschaften hinzufügen, aber das bedeutet nicht, dass Sie dies tun sollten.
Array
in Javascript sollte als Liste verwendet werden, wenn SieObject
stattdessen ein assoziatives Array verwenden möchten .Beachten Sie, dass, wenn Sie wirklich eine
Array
mit benannten Eigenschaften anstelleObject
dieser Eigenschaften verwenden möchten, in einerfor...of
Schleife nicht auf sie zugegriffen werden kann und Sie möglicherweise auch unerwartete Ergebnisse erhalten, wenn JSON sie codiert, um sie weiterzugeben. Siehe Beispiel unten, in dem alle nicht numerischen Indizes ignoriert werden:quelle
Die
{}
-notation ist nur syntaktischer Zucker, um den Code schöner zu machen ;-)JavaScript hat viele ähnliche Konstrukte wie die Konstruktion von Funktionen, wobei function () nur ein Synonym für ist
quelle
{}
ist eine wörtliche Objektnotation,[]
ist ein wörtliches Array, ich bin mir nicht sicher, worum es bei Ihrer Antwort geht.