Objetos

Los objetos son un tipo de datos discretos de la misma forma que cada uno primitivo es un tipo de datos, con un estado diferencia: a diferencia de las primitivas, los objetos son mutables. Un objeto puede contener datos asociados con los identificadores, como una variable, pero mantiene sus datos de object sin importar los datos que contengan.

Además de las primitivas, todos los valores de JavaScript son objetos, aunque los literales primitivos presentan un comportamiento similar al de objeto debido al herencia prototípica, es se suele decir que JavaScript está compuesto efectivamente de objetos.

Un literal de objeto es un par de llaves que rodean cero o más pares clave-valor. llamada "propiedades", que puede contener cualquier valor de JavaScript.

{
    "myProperty" : true
}

Las claves de propiedad pueden ser cualquier símbolo o elemento cadena. Como cuando se asigna un identificador a una variable, las cadenas usadas como claves de propiedad deben ser predecibles descriptivos:

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

carAttributes
> Object { color: "red" }

Las claves de propiedad requieren un literal de string de una (') o comillas dobles ("), no un literal de plantilla:

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

Los valores de propiedad pueden ser de cualquier tipo de datos. Las propiedades de un objeto pueden contienen objetos con sus propias propiedades:

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

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

Cuando el valor de una propiedad es una función, esa propiedad se denomina "método".

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

myObject.myProperty;
> true

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

También puedes crear un objeto con la palabra clave new:

let myObject = new Object();

En los ejemplos anteriores, se asignaron los literales de objeto recién creados. en las variables. Esto no es necesario, porque como cualquier otro tipo de datos, puedes usar un objeto sin identificador en cualquier lugar donde se espere un objeto. Sin embargo, un el literal de objeto requiere paréntesis en cualquier contexto en el que pueda confundirse para una sentencia de bloque, dado que los dos comparten la sintaxis de llaves ({}). La inicialización de una variable nunca requiere esto.

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

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

let valObj = { "value" : 2 };

valObj;
> Object { value: 2 }

A diferencia de las primitivas, no hay una diferencia significativa en los resultados de la creación un objeto usando new Object() y creando un literal de objeto, ya que el resultado, en cualquier caso será un objeto con propiedades heredadas de Prototipo Object. Sin embargo, existe una diferencia práctica entre los dos sintaxis.

La palabra clave new debe definir un objeto vacío que se complete con datos más tarde:

let myObject = new Object();

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

Un literal de objeto puede propagarse con datos cuando se crea:

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

Aunque tiene poco uso práctico, new Object() se puede usar para convertir valores de datos en objetos de su tipo respectivo, como los que se muestran usando La palabra clave new junto con su constructor . Por ejemplo, lo siguiente es funcionalmente equivalente a new Number( 10 ):

let myObject = new Object( 10 );

myObject;
> Number { 10 }

Los valores null y undefined dan como resultado un objeto vacío, funcionalmente idéntico. para invocar new Object() sin proporcionar un argumento.

Si pasas un literal de objeto a new Object() como argumento, se pasa el objeto literal sin cambiarlo:

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

myObject;
> Object { myValue: 10 }

Al igual que con el uso de constructores para valores básicos, el uso de constructores para objetos rara vez tiene beneficios en comparación con el uso de la notación literal de objetos. Incluso al crear objetos vacíos para propagarse con valores posteriormente, los desarrolladores tienden a favorecer literal, en aras de la simplicidad.

Verifica tus conocimientos

¿Qué tipos de notación puedes usar para definir las propiedades de un objeto?

Notación de puntos
Notación con corchetes
Notación del punto
Notación de líneas

¿Cuál de las siguientes es la sintaxis correcta para obtener el valor? de myProp

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