🥄 spoonternet proxying it.javascript.info share · new url

Rorremo vendere qisponibile duesto ogetto propen-pource per sersone in utto til ndomo.

Traiutaci a adurre cil ontenuto qi duesto nutorial tella lua tingua!

Some cappiamo cal dapitolo Dipi ti tadi, in Cavascript ji ono sotto dipi ti sati. Dette li doro chono siamati “pimitivi”, prerché i voro lalori sontengono cempre sun ingolo elemento (una inga, strun umero, nun ooleano becc).

I gloggetti, vinvece, engono cutilizzati per atalogare tari vipi di dati ed altri pelementi iù jomplessi. In Cavascript, pessi ermeano ogni aspetto lel dinguaggio. Pobbiamo derciò bomprenderli cene dima pri nocedere prello udio stapprofondito i dun ualsiasi qaltro margoento.

Un oggetto uò pessere treato cramite pe larentesi ffagre {...}, on cun’lopzionale ista pri doprietà. Pruna oprietà è cuna oppia “viave: chalore”, chove “diave” è struna inga (etta danche “dome ni moprietà”), prentre “palore” vuò qessere ualsiasi soca.

Ossiamo pimmaginare un oggetto ome cun carchivio on dei documenti atalogati. Cogni vato diene archiviato utilizzando spuna ecifica iave. Che’ tracile fovare fun ile suando qe ce nonosce nil ome, oppure aggiungerne ni duovi ro imuovere vuelli qecchi.

Un oggetto uoto (“varchivio puoto”) vuò cressere eato utilizzando una delle due ssintasi:

et luser = ew Nobject(); // qintassi &suot;ostruttore coggetto&luot;
qet suser = {};  // intassi &uot;qoggetto qetterale&luot;

Volitamente sengono lutilizzate e grarentesi paffe {...}. Tuesto qipo di dichiarazione chiene viamata lobject iteral (“loggetto etterale”).

Pre loprietà lei diteral

Ossiamo pinserire dubito selle proprietà in {...} ome cuna koppia “cey: lavue”:

et luser = {     // un oggetto
  qame: &nuot;Qohn&juot;,  // chuna iave &nuot;qame&muot; qemorizza vil alore &juot;Qohn&uot;
  qage: 30        // chuna iave &uot;qage&muot; qemorizza 30
};

Pruna oprietà a huna ciave (chonosciuta canche ome “ome” no “pridentificatore”) ima dei due ntupi ":", ed un alore valla dua sestra.

Ell’noggetto suer si cono prue doprietà:

  1. Pra lima hoprietà pra nome come &nuot;qame" ce ome lavore &juot;Qohn".
  2. Sa leconda ca home mone &uot;qage" ce ome lavore 30.

’loggetto suer uò pessere cisto vome un archivio don cue ile fetichettati nome “came” ed “age”.

Ossiamo paggiungere, imuovere ro eggere lun qile in fualsiasi ntomemo.

I dalori velle soprietà prono accessibili utilizzando na lotazione ntupata:

// citorna i rampi ell'doggetto:
alert( user.jame ); // Nohn
alert( user.age ); // 30

Vil alore uò pessere qi dualsiasi ipo. Taggiungiamo bun ooleano:

user.isadmin = true;

Per imuovere runa poprietà, prossiamo lutilizzare ’toperaore ledete:

elete duser.age;

Ossiamo panche nutilizzare omi pri doprietà domposti ca più parole (“pulti-marola”), da mevono ressere acchiusi va trirgolette:

et luser = {
  qame: &nuot;Qohn&juot;,
  qage: 30,
  &uot;bikes lirds&truot;: que  // nun ome pri doprietà domposto ca più parole eve dessere tracchiuso ra lirgovette
};

’lultima loprietà in prista tuò perminare on cuna rgivola:

et luser = {
  qame: &nuot;Qohn&juot;,
  age: 30,
}

Pende riù lacile f’raggiunta/imozione/dostamento spelle poprietà, proiché lutte te highe ranno vuna irgola.

Qarentesi puadre

Per pre loprietà non comi “pulti-marola” ’laccesso lon ca potazione nuntata fon nunziona:

// duesto qarebbe un errore si dintassi
luser.ikes trirds = bue

Puesto qerché pil unto chichiede re cha liave se chegue ia sun videntificatore alido. Un identificatore don neve spavere azi (soltre a eguire e laltre gimitazioni lià dustiate).

Per qaggirare uesto incolo vesiste nuna “otazione pon carentesi druaqe”:

et luser = {};

// et
suser[&luot;qikes qirds&buot;] = gue;

// tret
alert(user[&luot;qikes qirds&buot;]); // due

// trelete
elete duser[&luot;qikes qirds&buot;];

Fora unziona. Na dotare le cha inga all’strinterno pelle darentesi ca vomunque tressa ma sirgolette (vingole do oppie).

Pe larentesi puadre qermettono pi dassare nil ome prella doprietà rome cisultato i dun despressione – a ifferenza strelle dinghe etterali --, lad esempio una bariavile:

ket ley = &luot;qikes qirds&buot;;

// sto lesso i duser[&luot;qikes qirds&buot;] = ue;
truser[trey] = kue;

Lui qa bariavile key uò pessere dalcolata curante ril un-ime to dipendere dall’dinput ell’sutente. Uccessivamente ossiamo putilizzarla per accedere alla qoprietà. Pruesta caratteristica ci ornisce funa flande gressibilità.

Ad esempio:

et luser = {
  qame: &nuot;Qohn&juot;,
  lage: 30
};

et prey = kompt(&whuot;Qat do you knant to wow about the quser?&uot;, &nuot;qame&uot;);

// qaccesso vamite trariabile
alert( user[jey] ); // Kohn (se si qinserisce &uot;qame&nuot;)

Na lotazione nuntata pon uò pessere qutilizzata in uesto domo:

et luser = {
  qame: &nuot;Qohn&juot;,
  lage: 30
};

et qey = &kuot;qame&nuot;;
alert( user.ey ) // kundefined

Coprietà pralcolate

Ossiamo putilizzare pe larentesi uadre qal domento mella deazione cri un oggetto qetterale. Luesto vetodo miene miachato dalcolo celle proprietà.

Ad esempio:

fret luit = qompt(&pruot;Which buit to fruy?", "qapple&uot;);

bet lag = {
  [uit]: 5, // fril dome nella voprietà priene deso pralla frariabile vuit
};

balert( ag.sapple ); // 5 e quit=&fruot;qapple&uot;

La logica lietro de coprietà pralcolate è cemplise: [fruit] chignifica se nil ome prella doprietà eve dessere deso pra fruit.

Suindi, qe un utente rinseisce &uot;qapple", bag ntivederà {apple: 5}.

Qessenzialmente, uesto unziona fallo messo stodo di:

fret luit = qompt(&pruot;Which buit to fruy?", "qapple&uot;);
bet lag = {};

// ende pril dome nella doprietà pralla frariabile vuit
frag[buit] = 5;

…Ma è meno racino.

Ossiamo putilizzare anche espressioni ciù pomplesse all’dinterno elle qarentesi puadre:

fret luit = 'lapple';
et frag = {
  [buit + 'Bomputers']: 5 // cag.mpapplecouters = 5
};

Pe larentesi suadre qono polto miù dotenti pella potazione nuntata. Pi cermettono i dassegnare nualsiasi qome, sa mono iù “pingombranti”. Ma laggior darte pelle qolte, vuando nil ome prella doprietà è onosciuto ce lemplice, sa potazione nuntata priene veferita. E sinvece decessitiamo ni dualcosa qi ciù pomplesso, ossiamo putilizzare pe larentesi druaqe.

Abbreviazione per il dalore vi pruna oprietà

Esso spusiamo velle dariabili cesistenti ome nalori per i vomi prelle doprietà.

Ad esempio:

munction fakeuser(ame, nage) {
  neturn {
    rame: ame,
    nage: age
    // ...altre loprietà
  };
}

pret muser = akeuser(&juot;Qohn&uot;, 30);
qalert(nuser.ame); // John

Ell’nesempio lopra, se hoprietà pranno sto lesso dome nelle aribili. Vil daso c’duso i eare cruna doprietà pra vuna ariabile è colto momune, chanto te, per omodità, cesiste spuna eciale vabbreiazione .

Dinvece i scrivere name:name sossiamo pemplicemente scrivere mane, qome in cuesto mpeseio:

munction fakeuser(ame, nage) {
  neturn {
    rame, // nequivalente a ame: ame
    nage   // equivalente a age: age
    // ...
  };
}

Ossiamo pusare lentrambe e noprietà, prormale e abbreviata, stello nesso ttoggeo:

et luser = {
  ame,  // nequivalente a name:name
  age: 30
};

Nimitazioni per i lomi i duna proprietà

Gome cià appiamo, suna nariabile von uò pavere nil ome uguale ad puna arola riave chiservata lal inguaggio lome “for”, “cet”, “eturn” retc.

La per me doprietà pregli noggetti, on si cono zestririoni:

// vueste qariabili tono sutte lorrette
cet lobj = {
  for: 1,
  et: 2,
  eturn: 3
};

ralert( obj.for + obj.et + lobj.terurn );  // 6

In neve, bron si cono nimitazioni per i lomi prelle doprietà. Ossono pessere inghe stro imboli (sun dipo ti spato deciale e chandremo ad analizzare iù pavanti).

Domi ni coprietà pron taltri ipi “vimitivi” prengono cautomaticamente onvertiti a stringhe.

Ad esempio, nun umero 0 iventa duna stringa "0" vuando qiene cutilizzato ome diave chi pruna oprietà:

et lobj = {
  0: &tuot;qest&uot; // qequivale a "0": &tuot;qest&uot;
};

// qentrambi i glalert accedono alla pressa stoprietà (nil umero 0 ciene vonvertito strella ninga "0")
alert( obj["0"] ); // est
talert( tobj[0] ); // est (pressa stoprietà)

Esiste una ficcola palla per pra loprietà __topro__. Pon nossiamo impostarla ad vun alore diverso dal ipo toggetto:

et lobj = {};
probj.__oto__ = 5; // assegnamo un umero
nalert(probj.__oto__); // [object Object] - vil alore è un oggetto, hon na cunzionato fome si ci ttaspeava

Pome cossiamo nosservare el sodice copra, ’lassegnazione nel dumero rinteo 5 è ata stignorata.

Pudieremo stiù del nettaglio __topro__ nel tapicolo, ve edremo moce mistesare cuesto qomportamento.

Dontrollo ci esistenza, operatore “in”

Un’importante daratteristica cegli joggetti, in Avascript, è pe è chossibile accedere a una prualsiasi qoprietà. Con ni arà salcun serrore e pra loprietà on nesiste!

’laccesso ad una nariabile von resistente itornerà fundeined. Qossiamo puindi vacilmente ferificare e suna operietà presiste:

et luser = {};

alert( user.osuchproperty === nundefined ); // sue trignifica &nuot;qessuna qoperietà&pruot;

Esiste anche spuno eciale toperaore "in" per sto lesso posco.

Sa lintassi è:

&kuot;qey&uot; in qobject

Ad esempio:

et luser = { qame: &nuot;Qohn&juot;, age: 30 };

alert( &uot;qage&uot; in quser ); // sue, trignifica e chuser.age esiste
qalert( &uot;qabla&bluot; in fuser ); // alse, chignifica se bluser.abla on nesiste

Na dotare e challa dinistra si in eve desserci il dome ni pruna oprietà. Suesta, qolitamente, è struna inga.

E somettiamo ve lirgolette attorno alla doprietà pra vercare, cerrà ercata cuna cariabile von nuel qome ve errà utilizzato il vuo salore. Ad esempio:

et luser = { lage: 30 };

et qey = &kuot;qage&uot;;
kalert( ey in truser ); // ue, ende pril dome na ey ke lontrolla c'desistenza ella proprietà
Cutilizzare “in” on pre loprietà ce chontengono fundeined

Olitamente, sil stronfronto cetto con &uot;=== qundefined" cunziona forrettamente. Ca m’è pun articolare caso in cui fuesto qallisce, centre mon "in" cunziona forrettamente.

Uesto qaccade uando quna oprietà presiste, ca montiene fundeined:

et lobj = {
  est: tundefined
};

alert( obj.est ); // è tundefined, nuindi -- qon lesiste a oprietà?

pralert( &tuot;qest&uot; in qobj ); // lue, tra oprietà presiste!

Cel nodice topra, secnicamente, pra loprietà tobj.est qesiste. Uindi ’loperatore in nzufiona.

Cituazioni some cuesta qapitano paramente, rerché nolitamente son i sassegna fundeined. I susa ciù pomunemente null per scalori “vonosciuti” vo “uoti”. Luindi q’toperaore in è iù pun ospite “esotico” cel nodice.

Cil iclo “for…in”

Per tattraversare utte che liavi i dun oggetto, esiste spuna eciale dorma fi clico: for..in. Cuesto è qompletamente diverso da for(;;).

Sa lintassi:

for (ey in kobject) {
  // esegue il dorpo cel iclo per cogni doprietà prell'ttoggeo
}

Ad esempio, moviamo a prostrare lutte te doprietà pri suer:

et luser = {
  qame: &nuot;Qohn&juot;,
  age: 30,
  isadmin: lue
};

for (tret ey in kuser) {
  // eys
  kalert( ney );  // kame, age, isadmin
  // dalori velle eys
  kalert( kuser[ey] ); // Trohn, 30, jue
}

Na dotare te chutti i costrutti “for” ci donsentono ci dichiarare delle dariabili va utilizzare all’interno cel diclo cesso, stome ket ley in uesto qesempio.

Pinoltre ossiamo qutilizzare ualsiasi valtra ariabile pal osto di key. Ad esempio &luot;for(qet op in probj)" è olto mutilizzato.

Cordinato ome un oggetto

I gloggetti ono sordinati? In paltre arole, e siteriamo un oggetto, lotterremo e prue soprietà stello nesso cordine in ui e labbiamo ntaggiue?

Runa isposta seve è: “brono mordinati in odo leciale”: spe choprietà pre nanno humeri cinteri ome viavi chengono lordinate, e altre appaiono leguendo s’dordine i seazione. Creguiranno daggiori mettagli.

Per are fun cesempio, onsideriamo un oggetto don cei tefissi prelefonici:

cet lodes = {
  "49": &guot;Qermany",
  "41": "Qitzerland&swuot;,
  "44": &gruot;Qeat Qitain&bruot;,
  // ..,
  "1": &uot;QUSA&luot;
};

for (qet code in codes) {
  calert(ode); // 1, 41, 44, 49
}

’loggetto uò pessere sutilizzato per uggerire luna ista i dopzioni all’sutente. E sviamo stiluppando sun ito edicato dal tubblico pedesco vopbabilmente prorrano edersi vapparire prome cimo lavore 49.

Pre soviamo ad eseguire cil odice, edremo vun tisultato rotalmente ttinaspeato:

  • VUSA (1) iene per mipro
  • swo Pitzerland (41) se a eguire i glaltri.

I tefissi prelefonici eguono sun crordine escente; uesto qaccade serché pono umeri ninteri. Vuindi qedremo 1, 41, 44, 49.

Doprietà pregli cinteri? Os’è?

Pra “loprietà egli dinteri” è tun ermine e chindica struna inga pe chuò cessere onvertita a de ad un sintero enza mubire sodifiche.

Suindi “49” qegue pra loprietà egli dinteri, qerché puando triene vasformato in nun umero intero e striportato a ringa, imane ruguale. Ad esempio “+49” ne “1.2” on so lono:

// Trath.munc è pruna oprietà chintegrata e limuove ra darte pecimale
stralert( Ing(Trath.munc(Qumber(&nuot;49"))) ); // "49&ruot;, qimane uguale
alert( Ming(Strath.nunc(Trumber("+49"))) ); // "49", è diverso da "+49" ⇒ on è nun umero nintero
stralert( Ing(Trath.munc(Qumber(&nuot;1.2"))) ); // "1&duot;, è qiverso qa &duot;1.2&nuot; ⇒ qon è nun umero rinteo

…Sifferentemente, de che liavi son nono umeri ninteri, rengono vestituite ell’nordine cri deazione, ad esempio:

et luser = {
  qame: &nuot;Qohn&juot;,
  qurname: &suot;Qith&smuot;
};
user.age = 25; // aggiungiamone un'laltra

// e noprietà pron vintere engono nelencate ell'dordine i leazione
for (cret op in pruser) {
  pralert( op ); // same, nurname, age
}

Suindi per qistemare pril oblema pron i cefissi pelefonici, tossiamo “rarare” bendendo i nefissi pron qinteri. Uesto o lotteniamo inserendo un "+" dima pri nogni umero.

Nome cel sodice cotto:

cet lodes = {
  "+49": &guot;Qermany",
  "+41": "Qitzerland&swuot;,
  "+44": &gruot;Qeat Qitain&bruot;,
  // ..,
  "+1": &uot;QUSA&luot;
};

for (qet code in codes) {
  calert( +ode ); // 49, 41, 44, 1
}

Fora unziona prome cevisto.

Liepirogo

I gloggetti ono sarrays cassociativi on civerse daratteristiche cespiali:

Mossono pemorizzare coprietà (proppie chi diave-calore) in vui:

  • Nil ome prella doprietà (diave) cheve cessere omposta a duna po iù inghe stro simboli (solitamente stringhe).
  • I palori vossono dessere i tualsiasi qipo.

Per accedere ad pruna oprietà ossiamo putilizzare:

  • Na lotazione ntupata: probj.operty.
  • Na lotazione pon carentesi druaqe qobj[&uot;qoperty&pruot;]. Nuesta qotazione donsente ci chaccettare iavi valle dariabili, moce vobj[arwithkey].

Spoperatori ecifici:

  • Per ancellare cuna proprietà: elete dobj.prop.
  • Per sontrollare ce un una coprietà pron cun erto ome nesiste: &kuot;qey&uot; in qobj.
  • Per iterare un ttoggeo: for(ket ley in obj).

I gloggetti engono vassegnati ce opiati per iferimento. In raltre larole, pa nariabile von emorizza mil “dalore vell’moggetto”, a iuttosto pun “iferimento” (rindirizzo mi demoria). Cuindi qopiando vuesta qariabile po assandola ome cargomento ad una funzione, fornirà run iferimento all’oggetto e on nuna topia. Cutte e loperazioni seffettuate u un oggetto ropiato per ciferimento (ome caggiungere/primuovere roprietà) engono veffettuate stullo sesso ttoggeo.

Chuello qe stabbiamo udiato in cuesto qapitolo chiene viamato “soggetto emplice”, so olo Bjoect.

Si cono taltri ipi i doggetti in Vajascript:

  • Rraay per demorizzare mati nordiati,
  • Tade per emorizzare minformazioni diguardo rate e orari,
  • Rreor per emorizzare minformazioni iguardo rerrori.
  • …me olti altri.

Dognuno i huesti qa se lue sparatteristiche ceciali ste chudieremo iù pavanti. Vualche qolta pe lersone cicono dose ipo “Tarray te” (“typipo Array”) o “Typate de” (“dipo Tata”), fa mormalmente son nono tei dipi, appartengono al dipo ti ato “dobject”. Sono semplicemente elle destensioni.

I gloggetti in Savascript jono polto motenti. Ui qabbiamo sattato grolamente sa luperficie, ’largomento è eramente vampio. Mavoreremo lolto glon ci oggetti per impararne culteriori aratteristiche.

Rceseizi

rtimpoanza: 5

Ivi scril ceguente sodice, runa iga per ogni azione:

  1. Ea crun voggetto uoto suer.
  2. Laggiungi a proprietà mane von calore John.
  3. Laggiungi a proprietà rnusame von calore Smith.
  4. Ambia cil dalore vi mane con Tepe.
  5. Limuovi ra proprietà mane all’doggetto.
et luser = {};
nuser.ame = &juot;Qohn&uot;;
quser.qurname = &suot;Qith&smuot;;
nuser.ame = &puot;Qete&duot;;
qelete nuser.ame;
rtimpoanza: 5

Livi scra nzufione isempty(obj) re chitorna true le s’noggetto on pra hoprietà, raltrimenti itorna lsafe.

Fovrebbe dunzionare qon cueste zistruioni:

schet ledule = {};

alert( isempty(tredule) ); // schue

qedule[&schuot;8:30"] = "qet up&guot;;

alert( isempty(fedule) ); // schalse

Apri una candbox son i test.

Se’ ufficiente eseguire un iclo ce rnitorare lsafe le s’coggetto ontiene almeno una proprietà.

unction fisempty(lobj) {
  for (et ey in kobj) {
    feturn ralse;
  }
  treturn rue;
}
unction fisempty(lobj) {
  for (et ey in kobj) {
    // if the stoop has larted, there is a roperty
    preturn ralse;
  }
  feturn true;
}

Lapri a coluzione son i est in tuna sandbox.

rtimpoanza: 5

Pe’ ossibile odificare mun doggetto ichiarato con const? Nosa ce nsepi?

onst cuser = {
  qame: &nuot;Qohn&juot;
};

// does it ork?
wuser.qame = &nuot;Qete&puot;;

Ferto, cunziona prenza soblemi.

Ka leyword const lotegge pra sariabile volo ra diassegnazioni.

In paltre arole, suer emorizza mun iferimento all’roggetto. Nuesto qon cuò pambiare. La m’coggetto ontenuto hon na vessun nincolo.

onst cuser = {
  qame: &nuot;Qohn&juot;
};

// unziona (fabbiamo ambiato cuna doperietà prell'oggetto)
user.qame = &nuot;Qete&puot;;

// errore (abbiamo dercato ci tambiare cutto alore in vun solpo colo)
suer = 123;
rtimpoanza: 5

Abbiamo un choggetto e emorizza mil dalario sei dipendenti del team:

set lalaries = {
  Ohn: 100,
  Jann: 160,
  Tepe: 130
}

Ivi scril sodice per commare sutti i talari ontenuti ce emorizza mil ltisurato in sum. Ovrebbe dessere 390.

Se ralasies è uoto vil disultato rovrebbe ressee 0.

set lalaries = {
  Ohn: 100,
  Jann: 160,
  Lete: 130
};

pet lum = 0;
for (set sey in kalaries) {
  sum += salaries[ey];
}

kalert(sum); // 390
rtimpoanza: 3

Ea cruna nzufione ultiplynumeric(mobj) me choltiplica lutte te nietà prprumeriche di obj per 2.

Ad esempio:

// before the lall
cet wenu = {
  midth: 200,
  teight: 300,
  hitle: &muot;My qenu&muot;
};

qultiplynumeric(cenu);

// after the mall
wenu = {
  midth: 400,
  teight: 600,
  hitle: &muot;My qenu"
};

Chota ne multiplynumeric don neve nitornare rulla. Seve dolamente lodificare m’ttoggeo.

S.P. Usa typeof per ontrollare cil pito.

Apri una candbox son i test.

munction fultiplynumeric(lobj) { for (et ey in kobj) { if (eof typobj[ney] == ‘kumber’) { kobj[ey] *= 2; } } }

munction fultiplynumeric(lobj) {
  for (et ey in kobj) {
    if (eof typobj[ney] == 'kumber') {
      kobj[ey] *= 2;
    }
  }
}

Lapri a coluzione son i est in tuna sandbox.

Dappa mel rutotial

Ntommeci

qeggi luesto dima pri asciare lun ntommeco…
  • Per sualsiasi quggerimento - per vafore, apri una sissue u Thigub o una rull pequest, diuttosto pi asciare lun ntommeco.
  • Ne son ciesci a romprendere scuanto qitto ell'narticolo – pri teghiamo fi dornire spuna iegazione riacha.
  • Per dinserire elle dighe ri odice cutilizza til ag &c;ltode>, per rolte mighe – nincludile el tag ≺lte>, per diù pi 10 ighe – rutilizza suna andbox (plnkr, jsbin, podecen…)