المعرفة:: JavaScript الحالة::مؤرشفة المراجع:: The Complete JavaScript Course 2022 From Zero to Expert, syahshiimi’s notes, https://www.sitepoint.com/es6-enhanced-object-literals/


Object Initialization from Variables (Property value shorthand)

The new property value shorthand lets us abbreviate the initialization of a property within an object literal, provided that the property key matches an existing variable name.

// ES6 code
const
  a = 1, b = 2, c = 3;
  obj = {
    a
    b
    c
  };
// obj.a = 1, obj.b = 2, obj.c = 3
 
const openingHours = { open: 12, close: 22 };
const restaurant = {
  name: 'Classico Italiano',
  // ES5
  openingHours: openingHours,
  // ES6 enhanced object literals
  openingHours,
  mainMenu: ['Pizza', 'Pasta', 'Risotto'],
};

Object Method Definition Shorthand

  • Object methods in ES5 require the function statement. This is no longer necessary in ES6; it permits a shorthand syntax.
  • It’s not possible to use ES6 fat arrow - function syntax here, because the method requires a name. That said, you can use arrow functions if you name each method directly (like ES5).
// ES5 code
var lib = {
  sum: function (a, b) {
    return a + b;
  },
  mult: function (a, b) {
    return a * b;
  },
};
 
// ES6 code
const lib = {
  sum(a, b) {
    return a + b;
  },
  mult(a, b) {
    return a * b;
  },
};
 
// ES6 Arrow function
const lib = {
  sum: (a, b) => a + b,
  mult: (a, b) => a * b,
};
 
console.log(lib.sum(2, 3)); // 5
console.log(lib.mult(2, 3)); // 6

Dynamic (Computed) Property Keys

  • ES6 also enables the ability to have computed property keys in an object literal definition.
  • Any expression can be used to create a key.
  • A dynamic key can be used for methods as well as properties.
const weekdays = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"];
const openingHours = {
  [weekdays[3]]: {
    open: 12,
    close: 22,
  },
  [weekdays[4]]: {
    open: 11,
    close: 23,
  },
  [weekdays[5]]: {
    open: 0, // Open 24 hours
    close: 24,
  },
};
 
// ES6 code
const i = 2,
  obj = {
    // Method dynamic key
    ["mult" + i]: x => x * i,
  };
 
console.log(obj.mult2(5)); // 10