Gli oggetti sono un tipo di dati discreto, così come ogni
primitivo è un tipo di dati, con un elemento critico
Differenza: a differenza delle primitive, gli oggetti sono mutabili. Un oggetto può contenere dati
associata a identificatori, come una variabile, ma conserva i suoi dati object
a prescindere dai dati che contiene.
A parte le primitive, tutti i valori JavaScript sono oggetti, anche se i valori letterali primitivi mostrano un comportamento simile a un oggetto a causa ereditarietà prototipale, spesso detto che JavaScript è composto da oggetti.
Un valore letterale oggetto è una coppia di parentesi graffe che circondano zero o più coppie chiave-valore coppie chiamate "proprietà", che può contenere qualsiasi valore JavaScript.
{
"myProperty" : true
}
Le chiavi della proprietà possono essere qualsiasi simbolo o stringa. Ad esempio, per l'assegnazione di un identificatore a una variabile, le stringhe utilizzate come chiavi di proprietà devono essere prevedibili descrittivo:
let carAttributes = {
"color" : "red"
};
carAttributes
> Object { color: "red" }
Le chiavi proprietà richiedono un valore letterale di stringa singola ('
) o tra virgolette doppie ("
), non
un valore letterale modello:
let carAttributes = {
`keyString` : false
};
> Uncaught SyntaxError: expected property name, got template literal
I valori delle proprietà possono essere di qualsiasi tipo. Le proprietà di un oggetto possono contengono oggetti con le loro proprietà:
let myObject = {
'key' : {
'subkey' : true,
'othersubkey' : false
}
};
myObject;
> Object { key: Object { subkey: true, othersubkey: false } }
Quando il valore di una proprietà è una funzione, questa proprietà è chiamata "metodo".
const myObject = {
"myProperty" : true,
myMethod() {
console.log( "This is a method." );
}
}
myObject.myProperty;
> true
myObject.myMethod();
> "This is a method."
Puoi anche creare un oggetto utilizzando la parola chiave new
:
let myObject = new Object();
Negli esempi precedenti, i valori letterali oggetto appena creati sono stati assegnati
alle variabili. Non è obbligatorio perché, come per qualsiasi altro tipo di dati, puoi utilizzare
un oggetto senza identificatore ovunque sia previsto un oggetto. Tuttavia, un
il valore letterale oggetto richiede le parentesi in qualsiasi contesto in cui potrebbe essere confuso
per un'istruzione di blocco, dato che le due condividono la sintassi delle parentesi graffe ({}
).
Non è mai necessario inizializzare una variabile.
{ "value" : 2 }
> Uncaught SyntaxError: unexpected token: ':'
({ "value" : 2 })
> Object { value: 2 }
let valObj = { "value" : 2 };
valObj;
> Object { value: 2 }
A differenza delle primitive, non c'è alcuna differenza significativa nei risultati della creazione
un oggetto utilizzando new Object()
e la creazione di un valore letterale oggetto, perché
il risultato sarà in entrambi i casi un oggetto con proprietà ereditate dal
Object
prototipo. Esiste però una differenza pratica tra i due
sintattico.
La parola chiave new
deve definire un oggetto vuoto che verrà riempito con dati in un secondo momento:
let myObject = new Object();
myObject.booleanValue = true;
myObject.stringValue = "My string.";
Un valore letterale oggetto può essere compilato con i dati al momento della creazione:
let myObject = {
'booleanValue' : true,
'stringValue' : "My string."
};
Sebbene abbia poco impiego pratico, new Object()
può essere usato per trasformare gli oggetti
i valori dei dati in oggetti del rispettivo tipo, come quelli restituiti utilizzando
la parola chiave new
insieme al relativo costruttore
personalizzata. Ad esempio, quanto segue è funzionalmente equivalente a
new Number( 10 )
:
let myObject = new Object( 10 );
myObject;
> Number { 10 }
I valori null
e undefined
generano un oggetto vuoto, funzionalmente identico
a richiamare new Object()
senza fornire un argomento.
Il passaggio di un oggetto letterale a new Object()
come argomento consente di passare l'oggetto
senza modificarlo:
let myObject = new Object( { myValue : 10 } );
myObject;
> Object { myValue: 10 }
Come per i costruttori per i valori primitivi, l'uso dei costruttori per gli oggetti raramente ha vantaggi rispetto all'uso della notazione letterale oggetto. Anche durante la creazione vuoti da completare con i valori in un secondo momento, gli sviluppatori tendono a prediligere notazione letterale per semplicità.
Verifica le tue conoscenze
Che tipi di notazione puoi utilizzare per impostare le proprietà di un oggetto?
Quale delle seguenti è la sintassi corretta per ottenere il valore
di myProp
myObj["myProp"];
myObj("myProp");
myObj{"myProp"};