90 votes

Littéral d'objet Javascript: en quoi consiste exactement {a, b, c}?

La question que j’ai est mieux posée par le biais de ce jsfiddle , dont le code est ci-dessous:

 var a = 1, b = 'x', c = true;

var d = {a: a, b: b, c: c}; // <--- object literal
var e = [a, b, c];          // <--- array
var f = {a, b, c};          // <--- what exactly is this??

// these all give the same output:
alert(d.a  + ', ' + d.b +  ', ' + d.c );
alert(e[0] + ', ' + e[1] + ', ' + e[2]);
alert(f.a  + ', ' + f.b +  ', ' + f.c );
 

Quelle sorte de structure de données est f ? Est-ce juste un raccourci pour d ?

78voto

madox2 Points 6855
var f = {a, b, c};

Il est venu avec ES6 (ECMAScript 2015) et signifie exactement la même chose que:

var f = {a: a, b: b, c: c};

Il est appelé Littéral d'Objet de Valeur de Propriété des Abréviations (ou simplement la valeur de la propriété de la sténographie, la sténographie de propriétés).

Vous pouvez également combiner des abréviations classiques de l'initialisation:

var f = {a: 1, b, c};

Pour plus d'informations, voir initialiseur d'Objet.

72voto

void Points 14554

C'est un Objet d'Initialiseur de Propriété d'Abréviation dans l'ES6.

var f = {a, b, c, d:1}; // Will be equal to {a:a, b:b, c:c, d:1}

Cela fonctionne parce que la valeur de la propriété a le même nom que l'identificateur de propriété. Ce nouvel ajout à la syntaxe de l' Objet Initialiser (article 11.1.5) dans les dernières ECMAScript 6 projet de Rev 13. Et bien sûr, tout comme les limitations de ECMAScript 3, vous ne pouvez pas utiliser un mot réservé votre nom de la propriété.

Une telle abréviation de ne pas changer radicalement votre code, il ne fait que tout ce qui est un peu plus doux!

function createCar(name, brand, speed) {
  return { type: 'Car', name: name, brand: brand, speed: speed };
}

// With the new shorthand form
function createSweetCar(name, brand, speed) {
  return { type: 'Car', name, brand, speed }; // Yes it looks sweet.
}

Veuillez consulter le tableau de compatibilité pour le support de ces notations. Non environnements favorables, ces notations seront conduire à des erreurs de syntaxe.

Cette notation abrégée offre objet d'appariement plutôt bien:

Dans ECMAScript5 ce que nous avons l'habitude de faire:

var tmp = getDate();
var op  = tmp.op;
var lhs = tmp.lhs;
var rhs = tmp.rhs;

Peut être fait dans ECMAScript6 avec une seule ligne de code:

var { op, lhs, rhs } = getData();

13voto

MojoJojo Points 611
var f = {a, b, c};          // <--- what exactly is this??

Il définit un objet en JavaScript à l'aide de la nouvelle ECMAScript 2015 notation:

Comme par Mozilla Developer Network:

"Les objets peuvent être initialisées à l'aide de new Object(), l'Objet.créer(), ou à l'aide de la notation littérale (initialiseur de notation). Un initialiseur d'objet est une liste de zéro ou de plusieurs paires de noms de propriétés et de valeurs associées à un objet, placé entre accolades ({})."

var a = "foo", 
    b = 42, 
    c = {};

// Shorthand property names (ES6)
var o = { a, b, c }; 

est équivalent à:

var a = "foo", 
    b = 42,
    c = {};

var o = { 
  a: a,
  b: b,
  c: c
};

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X