Objekte

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?

Punktnotation
Klammernschreibweise
Punktnotation
Linienschreibweise

Wie lautet die richtige Syntax zum Abrufen des Werts? von myProp

myObj["myProp"];
myObj{"myProp"};
myObj("myProp");