Objekte sind ein diskreter Datentyp,
Primitive ist ein Datentyp mit einer
Unterschied: Im Gegensatz zu Primitiven sind Objekte veränderlich. Ein Objekt kann Daten enthalten
mit Kennungen (z. B. einer Variablen) verknüpft sind, ihre object
-Daten aber
unabhängig von den
enthaltenen Daten eingeben.
Abgesehen von Primitiven sind alle JavaScript-Werte Objekte. Primitiv-Literalen zeigen ein objektähnliches Verhalten aufgrund der prototypisierte Vererbung, sagten oft, dass JavaScript effektiv aus Objekten besteht.
Ein Objektliteral besteht aus geschweiften Klammern, die null oder mehr Schlüssel/Wert-Paare umgeben. Paare, die als „Eigenschaften“ bezeichnet werden, die einen beliebigen JavaScript-Wert enthalten kann.
{
"myProperty" : true
}
Property-Schlüssel können beliebige Symbole oder string angeben. Wie beim Zuweisen einer Kennung in eine Variable eingefügt werden, sollten die als Attributschlüssel verwendeten Strings vorhersehbar sein beschreibend:
let carAttributes = {
"color" : "red"
};
carAttributes
> Object { color: "red" }
Für Attributschlüssel ist ein einfaches Stringliteral ('
) oder ein Stringliteral in doppelten Anführungszeichen ("
) erforderlich
Ein Vorlagenliteral:
let carAttributes = {
`keyString` : false
};
> Uncaught SyntaxError: expected property name, got template literal
Attributwerte können einen beliebigen Datentyp haben. Die Eigenschaften eines Objekts können Objekte mit eigenen Eigenschaften enthalten:
let myObject = {
'key' : {
'subkey' : true,
'othersubkey' : false
}
};
myObject;
> Object { key: Object { subkey: true, othersubkey: false } }
Wenn der Wert einer Eigenschaft eine Funktion ist, wird diese Eigenschaft als "Methode" bezeichnet.
const myObject = {
"myProperty" : true,
myMethod() {
console.log( "This is a method." );
}
}
myObject.myProperty;
> true
myObject.myMethod();
> "This is a method."
Sie können ein Objekt auch mit dem Schlüsselwort new
erstellen:
let myObject = new Object();
In den vorherigen Beispielen wurden den neu erstellten Objektliteralen die neu erstellten
auf Variablen anwenden. Dies ist nicht erforderlich, da Sie wie bei allen anderen Datentypen auch
ein Objekt ohne Kennung überall dort, wo ein Objekt erwartet wird. Eine
Für das Objektliteral sind in jedem Kontext, in dem es verwechselt werden könnte, Klammern erforderlich
für eine Blockanweisung, da für beide die Syntax mit geschweiften Klammern verwendet wird ({}
).
Dies ist beim Initialisieren einer Variablen nie erforderlich.
{ "value" : 2 }
> Uncaught SyntaxError: unexpected token: ':'
({ "value" : 2 })
> Object { value: 2 }
let valObj = { "value" : 2 };
valObj;
> Object { value: 2 }
Im Gegensatz zu Primitiven gibt es bei der Erstellung
ein Objekt mit new Object()
und Erstellen eines Objektliterals, da das
Ergebnis ist in beiden Fällen ein Objekt mit Eigenschaften, die vom
Object
-Prototyps. Es gibt jedoch einen praktischen Unterschied zwischen den beiden.
Syntaxen.
Mit dem Schlüsselwort new
muss ein leeres Objekt definiert werden, das später mit Daten gefüllt wird:
let myObject = new Object();
myObject.booleanValue = true;
myObject.stringValue = "My string.";
Ein Objektliteral kann bei der Erstellung mit Daten gefüllt werden:
let myObject = {
'booleanValue' : true,
'stringValue' : "My string."
};
new Object()
ist zwar wenig praktisch, kann aber zum Primitivieren von Primitiven verwendet werden.
in Objekte ihres jeweiligen Typs, wie z. B. diejenigen, die mithilfe der
das Keyword new
zusammen mit seinem Konstruktor
. Zum Beispiel entspricht die folgende Funktion funktional
new Number( 10 )
:
let myObject = new Object( 10 );
myObject;
> Number { 10 }
Die Werte null
und undefined
ergeben ein leeres Objekt, das funktional identisch ist.
zum Aufrufen von new Object()
ohne Angabe eines Arguments.
Wenn Sie ein Objektliteral als Argument an new Object()
übergeben, wird das Objekt übergeben.
literal, ohne es zu ändern:
let myObject = new Object( { myValue : 10 } );
myObject;
> Object { myValue: 10 }
Wie bei der Verwendung von Konstruktoren für primitive Werte können auch hier Konstruktoren für Objekte verwendet werden. hat selten Vorteile gegenüber der Objektliteral-Notation. Auch beim Erstellen leeren Objekten, die später mit Werten gefüllt werden, tendieren Entwickler dazu, der Einfachheit halber eine Literalschreibweise.
Wissen testen
Welche Arten von Notation können Sie verwenden, um die Eigenschaften eines Objekts festzulegen?
Wie lautet die richtige Syntax zum Abrufen des Werts?
von myProp
myObj("myProp");
myObj["myProp"];
myObj{"myProp"};