Objets

Les objets sont un type de données discrètes de la même manière que chaque primitive est un type de données, avec un élément critique différence: contrairement aux primitives, les objets sont modifiables. Un objet peut contenir des données associées à des identifiants, comme une variable, tout en conservant ses données object. sans tenir compte des données qu'il contient.

Hormis les primitives, toutes les valeurs JavaScript sont des objets. les littéraux primitifs présentent un comportement de type objet en raison héritage prototypique, c'est dit souvent que JavaScript est effectivement composé d'objets.

Un littéral d'objet est une paire d'accolades entourant zéro ou plusieurs paires clé-valeur. appelées "propriétés", qui peut contenir n'importe quelle valeur JavaScript.

{
   
"myProperty" : true
}

Les clés de propriété peuvent être n'importe quel symbole ou chaîne. Comme lors de l'attribution d'un identifiant à une variable, les chaînes utilisées comme clés de propriété doivent être prévisibles descriptives:

let carAttributes = {
   
"color" : "red"
};

carAttributes
> Object { color: "red" }

Les clés de propriété nécessitent un littéral de chaîne (') ou double ("), mais pas Un littéral de modèle:

let carAttributes = {
   
`keyString` : false
};
> Uncaught SyntaxError: expected property name, got template literal

Les valeurs de propriété peuvent correspondre à n'importe quel type de données. Les propriétés d'un objet peuvent elles-mêmes contiennent des objets ayant leurs propres propriétés:

let myObject = {
   
'key' : {
       
'subkey' : true,
       
'othersubkey' : false
   
}
};

myObject
;
> Object { key: Object { subkey: true, othersubkey: false } }

Lorsque la valeur d'une propriété est une fonction, cette propriété est appelée "méthode".

const myObject = {
   
"myProperty" : true,
    myMethod
() {
        console
.log( "This is a method." );
   
}
}

myObject
.myProperty;
> true

myObject
.myMethod();
> "This is a method."

Vous pouvez également créer un objet à l'aide du mot clé new:

let myObject = new Object();

Dans les exemples précédents, les littéraux d'objets nouvellement créés se sont vu attribuer aux variables. Ce n'est pas obligatoire, car comme pour tout autre type de données, vous pouvez utiliser un objet sans identifiant partout où un objet est attendu. Toutefois, une Le littéral d'objet nécessite des parenthèses dans tous les contextes où il pourrait être confondu pour une instruction de bloc, étant donné que les deux partagent une syntaxe avec accolades ({}). Cela n'est jamais nécessaire pour initialiser une variable.

{ "value" : 2 }
> Uncaught SyntaxError: unexpected token: ':'

({ "value" : 2 })
> Object { value: 2 }

let valObj
= { "value" : 2 };

valObj
;
> Object { value: 2 }

Contrairement aux primitives, il n'y a pas de différence significative dans les résultats de la création un objet en utilisant new Object() et en créant un littéral d'objet, car Dans les deux cas, il s'agira d'un objet dont les propriétés sont héritées Prototype Object. Cependant, il existe une différence pratique entre les deux ou de syntaxes spécifiques.

Le mot clé new doit définir un objet vide qui sera ensuite rempli de données:

let myObject = new Object();

myObject
.booleanValue = true;
myObject
.stringValue = "My string.";

Un littéral d'objet peut être renseigné avec des données lors de sa création:

let myObject = {
   
'booleanValue' : true,
   
'stringValue' : "My string."
};

Bien qu'il n'ait que peu d'utilisation pratique, new Object() peut être utilisé pour transformer un langage primitif des valeurs de données dans des objets de leur type respectif, comme ceux renvoyés en utilisant Le mot clé new et son constructeur . Par exemple, le code suivant est fonctionnellement équivalent à new Number( 10 ):

let myObject = new Object( 10 );

myObject
;
> Number { 10 }

Les valeurs null et undefined génèrent un objet vide, fonctionnellement identique. à l'appel de new Object() sans fournir d'argument.

La transmission d'un littéral d'objet à new Object() en tant qu'argument transmet l'objet sans le modifier:

let myObject = new Object( { myValue : 10 } );

myObject
;
> Object { myValue: 10 }

Comme pour l'utilisation de constructeurs pour les valeurs primitives, utilisation de constructeurs pour les objets présente rarement des avantages par rapport à l'utilisation de la notation littérale d'objet. Même lors de la création les objets vides à ajouter ultérieurement des valeurs, les développeurs ont tendance à privilégier les objets par souci de simplicité.

Testez vos connaissances

Quels types de notation pouvez-vous utiliser pour définir les propriétés d'un objet ?

Notation du point
Notation entre crochets
Notation par points
Notation de ligne

Quelle est la syntaxe correcte pour obtenir la valeur sur myProp

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