Literales de objeto

Notación abreviada de propiedades

ES6 permite que las propiedades de un objeto se escriban directamente como variables; en este caso, el nombre de la propiedad es el nombre de la variable y el valor de la propiedad es el valor de la variable.

const age = 12; const name = "Amy"; const person = {age, name}; person //{age: 12, name: "Amy"} //Equivale a const person = {age: age, name: name}

Los nombres de métodos también se pueden abreviar

const person = { sayHi(){ console.log("Hi"); } } person.sayHi(); //"Hi" //Equivale a const person = { sayHi:function(){ console.log("Hi"); } } person.sayHi();//"Hi"

Si es una función Generator, se debe agregar un asterisco delante:

const obj = { * myGenerator() { yield 'hello world'; } }; //Equivale a const obj = { myGenerator: function* () { yield 'hello world'; } };

Expresiones como nombres de propiedades

ES6 permite usar expresiones como nombres de propiedades, pero la expresión debe estar entre corchetes.

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

Nota: la notación abreviada de propiedades y las expresiones como nombres de propiedades no se pueden usar al mismo tiempo; de lo contrario, se producirá un error.

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

Operador de extensión de objetos

El operador de extensión (...) se usa para extraer todas las propiedades enumerables del objeto parámetro y copiarlas al objeto actual.

Uso básico

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

Se puede usar para fusionar dos objetos

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

Notas

Cuando las propiedades personalizadas y las propiedades del objeto del operador de extensión son iguales:Si las propiedades personalizadas están después del operador de extensión, las propiedades con el mismo nombre dentro del objeto del operador de extensión serán sobrescritas.

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

Si las propiedades personalizadas están antes del operador de extensión, se convierten en el establecimiento de valores de propiedad predeterminados para el nuevo objeto.

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

Si después del operador de extensión hay un objeto vacío, no tiene ningún efecto ni produce errores.

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

Si después del operador de extensión hay null o undefined, no tiene ningún efecto ni produce errores.

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

Nuevos métodos de objetos

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

Se utiliza para copiar todas las propiedades enumerables de los objetos de origen al objeto de destino.

Uso básico

let target = {a: 1}; let object2 = {b: 2}; let object3 = {c: 3}; Object.assign(target,object2,object3); //El primer parámetro es el objeto de destino, y los parámetros siguientes son los objetos de origen. target; // {a: 1, b: 2, c: 3
  • Si el objeto de destino y los objetos de origen tienen propiedades con el mismo nombre, o si varios objetos de origen tienen propiedades con el mismo nombre, las propiedades posteriores sobrescribirán a las anteriores.
  • Si la función tiene un solo parámetro, cuando el parámetro es un objeto, devuelve directamente ese objeto; cuando el parámetro no es un objeto, primero convierte el parámetro en un objeto y luego lo devuelve.
Object.assign(3); // Number {3} typeof Object.assign(3); // "object"

Debido a que null y undefined no se pueden convertir en objetos, se producirá un error:

Object.assign(null); // TypeError: Cannot convert undefined or null to object Object.assign(undefined); // TypeError: Cannot convert undefined or null to objectCuando hay más de un parámetro,nullyundefinedsi no se coloca el primero, es decir, no es el objeto de destino, se omitiránullyundefinedy no se producirá un error.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

Notas

La copia de propiedades de assign es una copia superficial:

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

Reemplazo de propiedades con el mismo nombre

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

Tratamiento de arreglos

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

Los arreglos se tratan como objetos, por lo que primero se convierte [2,3] en {0:2,1:3}, y luego se realiza la copia de propiedades; por lo tanto, la propiedad 0 del objeto de origen sobrescribe la propiedad 0 del objeto de destino.

Object.is(value1, value2)

Se utiliza para comparar si dos valores son estrictamente iguales, básicamente similar a (===).

Uso básico

Uso básico

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

Diferencias con (===)

//Primero, +0 no es igual a -0 Object.is(+0,-0); //false +0 === -0 //true //Segundo, NaN es igual a sí mismo Object.is(NaN,NaN); //true NaN === NaN //false