Littéraux d'objet

Notation abrégée pour les propriétés

ES6 permet d'écrire directement les propriétés d'objet sous forme de variables ; le nom de la propriété est le nom de la variable, et la valeur de la propriété est la valeur de la variable.

const age = 12; const name = "Amy"; const person = {age, name}; person //{age: 12, name: "Amy"} //Équivalent à const person = {age: age, name: name}

Les noms de méthodes peuvent aussi être abrégés

const person = { sayHi(){ console.log("Hi"); } } person.sayHi(); //"Hi" //Équivalent à const person = { sayHi:function(){ console.log("Hi"); } } person.sayHi();//"Hi"

S'il s'agit d'une fonction génératrice, ajoutez un astérisque devant :

const obj = { * myGenerator() { yield 'hello world'; } }; //Équivalent à const obj = { myGenerator: function* () { yield 'hello world'; } };

Expressions de noms de propriétés

ES6 permet d'utiliser des expressions comme noms de propriétés, mais l'expression doit être placée entre crochets.

const obj = { ["he"+"llo"](){ return "Hi"; } } obj.hello(); //"Hi"

Remarque : la notation abrégée pour les propriétés et les expressions de nom de propriété ne peuvent pas être utilisées en même temps, sinon une erreur sera levée.

const hello = "Hello"; const obj = { [hello] }; obj //SyntaxError: Unexpected token } const hello = "Hello"; const obj = { [hello+"2"]:"world" }; obj //{Hello2: "world"}

Opérateur de propagation d'objet

L'opérateur de propagation (...) est utilisé pour extraire toutes les propriétés énumérables de l'objet passé en paramètre et les copier dans l'objet courant.

Utilisation de base

let person = {name: "Amy", age: 15}; let someone = { ...person }; someone; //{name: "Amy", age: 15}

Peut servir à fusionner deux objets

let age = {age: 15}; let name = {name: "Amy"}; let person = {...age, ...name}; person; //{age: 15, name: "Amy"}

Notes

Lorsque des propriétés personnalisées ont le même nom que les propriétés de l'objet de l'opérateur spread :Si la propriété personnalisée vient après l'opérateur spread, la propriété portant le même nom à l'intérieur de l'objet de l'opérateur spread sera écrasée.

let person = {name: "Amy", age: 15}; let someone = { ...person, name: "Mike", age: 17}; someone; //{name: "Mike", age: 17}

Si la propriété personnalisée vient avant l'opérateur spread, cela revient à définir des valeurs de propriété par défaut pour le nouvel objet.

let person = {name: "Amy", age: 15}; let someone = {name: "Mike", age: 17, ...person}; someone; //{name: "Amy", age: 15}

Si l'opérateur de décomposition est suivi d'un objet vide, il n'a aucun effet et ne lance pas d'erreur.

let a = {...{}, a: 1, b: 2}; a; //{a: 1, b: 2}

Si l'opérateur de décomposition est suivi de null ou undefined, il n'a aucun effet et ne lance pas d'erreur.

let b = {...null, ...undefined, a: 1, b: 2}; b; //{a: 1, b: 2}

Nouvelles méthodes pour les objets

Object.assign(target, source_1, ···)

Utilisé pour copier toutes les propriétés énumérables des objets sources vers l'objet cible.

Utilisation de base

let target = {a: 1}; let object2 = {b: 2}; let object3 = {c: 3}; Object.assign(target,object2,object3); //Le premier paramètre est l'objet cible, et les paramètres suivants sont les objets sources. target; // {a: 1, b: 2, c: 3
  • Si l’objet cible et un objet source ont une propriété du même nom, ou si plusieurs objets source ont une propriété du même nom, la propriété définie plus tard écrasera la précédente.
  • Si la fonction n’a qu’un seul paramètre, lorsque ce paramètre est un objet, elle renvoie directement l’objet ; lorsque le paramètre n’est pas un objet, elle convertit d’abord le paramètre en objet, puis le renvoie.
Object.assign(3); // Number {3} typeof Object.assign(3); // "object"

Comme null et undefined ne peuvent pas être convertis en objets, une erreur est levée :

Object.assign(null); // TypeError: Cannot convert undefined or null to object Object.assign(undefined); // TypeError: Cannot convert undefined or null to objectLorsqu’il y a plus d’un paramètre,nulletundefineds’il n’est pas placé en premier, c’est-à-dire s’il n’est pas l’objet cible, il sera ignoré,nulletundefinedsans générer d’erreur.Object.assign(1,undefined); // Number {1} Object.assign({a: 1},null); // {a: 1} Object.assign(undefined,{a: 1}); // TypeError: Cannot convert undefined or null to object

Notes

La copie des propriétés par assign est une copie superficielle :

let sourceObj = { a: { b: 1}}; let targetObj = {c: 3}; Object.assign(targetObj, sourceObj); targetObj.a.b = 2; sourceObj.a.b; // 2

Remplacement des propriétés de même nom

targetObj = { a: { b: 1, c:2}}; sourceObj = { a: { b: "hh"}}; Object.assign(targetObj, sourceObj); targetObj; // {a: {b: "hh"}}

Gestion des tableaux

Object.assign([2,3], [5]); // [5,3]

Il traite les tableaux comme des objets, donc [2,3] est d'abord converti en {0:2,1:3}, puis la copie des propriétés est effectuée, de sorte que la propriété 0 de l'objet source écrase la propriété 0 de l'objet cible.

Object.is(value1, value2)

Sert à comparer si deux valeurs sont strictement égales, globalement similaire à (===).

Utilisation de base

Utilisation de base

Object.est("q","q"); // true Object.est(1,1); // true Object.est([1],[1]); // false Object.est({q:1},{q:1}); // false

Différences par rapport à (===)

//Premièrement, +0 n'est pas égal à -0 Object.est(+0,-0); //false +0 === -0 //true //Deuxièmement, NaN est égal à lui-même Object.est(NaN,NaN); //true NaN === NaN //false