cos'è questa cosa in JavaScript?
-
05-07-2019 - |
Domanda
var something = {
wtf: null,
omg: null
};
La mia conoscenza di JavaScript è ancora orribilmente irregolare dall'ultima volta che ho programmato, ma penso di averli riappresi gran parte ora. Tranne questo. Non ricordo di aver mai visto questo prima d'ora. Che cos'è? E dove posso saperne di più?
Soluzione
È un oggetto letterale con due proprietà. Di solito è così che le persone creano array o hash associativi perché JS non supporta nativamente quella struttura di dati. Sebbene si noti che è ancora un oggetto completo, è anche possibile aggiungere funzioni come proprietà:
var myobj = {
name: 'SO',
hello: function() {
alert(this.name);
}
};
E puoi scorrere le proprietà usando un ciclo for:
for (i in myobj) {
// myobj[i]
// Using the brackets (myobj['name']) is the same as using a dot (myobj.name)
}
Altri suggerimenti
È la sintassi letterale dell'oggetto. 'Wft' e 'omg' sono nomi di proprietà mentre, null e null sono i valori delle proprietà.
È equivalente a:
var something = new Object();
something.wtf = null;
something.omg = null;
Consulta la documentazione di mozilla sui letterali degli oggetti: http: //developer.mozilla. org / en / Core_JavaScript_1.5_Guide: letterali # Object_Literals
Spiegazione da " Voglio una matrice associativa in Javascript " punto di vista (che è ciò che in molti casi i letterali oggetto finiscono per essere utilizzati)
Da " Mastering di array Javascript "
Un array associativo è un array che utilizza una stringa anziché un numero come indice.
var normalArray = [];
normalArray[1] = 'This is an enumerated array';
alert(normalArray[1]); // outputs: This is an enumerated array
var associativeArray = [];
associativeArray['person'] = 'John Smith';
alert(associativeArray['person']); // outputs: John Smith
Javascript non ha e non supporta array associativi. Tuttavia & # 8230; Tutti gli array in Javascript sono oggetti e la sintassi degli oggetti Javascript fornisce un'emulazione di base di un array associativo. Per questo motivo il codice di esempio sopra funzionerà effettivamente. Tieni presente che questo non è un array reale e presenta insidie ??reali se provi a usarlo. L'elemento "person" nell'esempio diventa parte delle proprietà e dei metodi dell'oggetto Array, proprio come .length, .sort (), .splice () e tutte le altre proprietà e metodi incorporati.
Puoi scorrere tra le proprietà di un oggetto con il seguente loop & # 8230;
var associativeArray = [];
associativeArray["one"] = "First";
associativeArray["two"] = "Second";
associativeArray["three"] = "Third";
for (i in associativeArray) {
document.writeln(i+':'+associativeArray[i]+', ');
// outputs: one:First, two:Second, three:Third
};
Nell'esempio sopra, associativeArray.length sarà zero perché in realtà non abbiamo inserito nulla nell'array, ma nell'oggetto associativeArray. associativeArray [0] non sarà definito.
Il loop nell'esempio sopra raccoglierà anche tutti i metodi, le proprietà e i prototipi che sono stati aggiunti all'array e non solo i tuoi dati. Un sacco di problemi che le persone hanno con la libreria Prototype è che i loro array associativi si rompono perché Prototype aggiunge alcune utili funzioni Prototype all'oggetto Array e per i cicli i in x prende quei metodi aggiuntivi. Questo è il pitfal dell'uso di array / oggetti come array associativo di un povero.
Come esempio finale, il codice precedente funzionerà indipendentemente dal fatto che tu definisca associativeArray come un array ([]), un oggetto ({}), un'espressione regolare (//), una stringa (" "), o qualsiasi altro oggetto Javascript.
La linea di fondo è - non tentare di usare array associativi, codice per quello che sono - proprietà degli oggetti, non array.
È un oggetto letterale (o, a volte, un oggetto vaniglia nelle librerie con classi hash).
Stessa cosa di:
var o = new Object();
o.wtf = null;
o.omg = null;
Questo è un oggetto letterale. È effettivamente equivalente al seguente:
var something = new Object();
something["wtf"] = null;
something["omg"] = null;
Credo che sia un oggetto con 2 proprietà, WTF e OMG.
potresti dire
something.wtf = "myMessage";
alert(something.wtf);
controlla JSON.ORG
Questo codice:
var something = {wtf:null}
Ha lo stesso effetto di:
var something={};
something.wtf=null;
O per verbosità inutile:
var something=new Object();
something.wtf=null;
Ed è utile ricordare che l'ultima riga è la stessa di
something["wtf"]=null;
Quindi puoi usare:
var myName="wtf";
something[myName]=null;
Questo è un esempio di istanza di oggetti JavaScript incorporata.