JavaScript je jezik baziran na objektima. S izuzetkom konstrukcija, kao što su petlje i operatori, skoro sve mogućnosti JavaScripta implementirane su s pomoću objekata. Objekt je složena vrsta podatka koji skuplja više vrijednosti u jednu cjelinu.
Objekti u JavaScriptu mogu se podijeliti u četiri grupe:
- objekti koje definira programer
- objekti ugrađeni u JavaScript (String, Number, Boolean, Math, Date ...)
- objekti preglednika (Navigator, Window, Document ..)
- objekti DOM.
Objekt možemo definirati i kao neuređen skup svojstava, od kojih svako svojstvo ima ime i vrijednost. Imenovane vrijednosti mogu biti osnovnog tipa (brojevi, stringovi) ili i same mogu biti objekti.
Objekt se najlakše stvara s pomoću {} ili new Object(). Literal tipa „objekt“ (inicijalizator objekta) sastoji se od liste parova „ime”: vrijednost, razdvojenih dvotočkom. Parovi se međusobno razdvajaju zarezima, a lista se navodi unutar vitičastih zagrada.
Primjer objekta:
var objekt = {
"test1": "vrijednost1",
"test2": "vrijednost2",
"test3": "vrijednost3"
};
Načini kretanja (loopanja) kroz objekt:
- Object.keys(objekt).forEach(function(key) {
console.log(key, objekt[key]);
});
- ES2015 standard
- ne uključuje prototipe unutar objekta, već samo svojstva s vrijednostima
- redoslijed je isti kao da ručno prolazimo kroz objekt
- for (var prop in objekt) {
if (!objekt.hasOwnProperty(prop)) {
….
continue;
}
….
}
- ES2015 standard
- prop je uvijek tipa „string“
- uključuje sve što se nalazi unutar objekta, čak i prototipe
- proizvoljan slijed kretanja
- potrebno dodati uvjet „if“, ako ne želimo uključiti i prototipe
- for (const key of Object.keys(objekt)) {
console.log(key, objekt[key]);
}
- ES2016 standard
- ne uključuje prototipe unutar objekta
- zamjena za for in
- omogućava upotrebu naredbi break, continue i return
- Object.entries(objekt).forEach(([key, value]) => console.log(key, value));
- ES2017 standard
- ne uključuje prototipe unutar objekta, već samo svojstva s vrijednostima
- redoslijed je isti kao da ručno prolazimo kroz objekt.
Ako projekt koristi vanjske biblioteke:
- jQuery:
- $.each(objekt, function(key, value) {
console.log(key, value);
});
- Underscore:
- _.each(objekt, function(value, key) {
console.log(key, value);
});
- Lodash:
- _.forIn(objekt, function(value, key) {
console.log(key, value);
});
- _.forOwn(objekt, function(value, key) {
console.log(key, value);
});
Upotreba vanjskih biblioteka dodatno pojednostavnjuje korištenje petlji. Osim dodatne jednostavnosti, vanjske biblioteke imaju i ugrađene dodatne provjere koje provjeravaju ispravnost objekta te o tome sukladno obavještavaju. Ako projekt ne sadrži vanjske biblioteke, za potrebe kretanja kroz objekt ih nije potrebno dodavati, jer obični Vanilla JS uvijek ima bolje performanse od bilo koje apstrakcije koda.