Verificarea Existentei si Iterarea Prin Metode si Proprietati
La verificarea și definirea dinamică a unor noi proprietăți și metode într-un obiect, poate fi important să verificăm în prealabil dacă acestea există. În JavaScript, se poate utiliza operatorul in. Acesta are sintaxa următoare:
"proprietate|metoda" in obiect
În ghilimele se specifică numele proprietății sau metodei, iar după in se specifică numele obiectului. Dacă o proprietate sau metodă cu un astfel de nume există, operatorul returnează true. În caz contrar, returnează false.
De exemplu, să verificăm dacă într-un obiect există anumite proprietăți:
const user = {};
user.name = "Tom";
user.age = 26;
user.print = function() {
console.log(this.name);
console.log(this.age);
};
const hasNameProp = "name" in user;
console.log(hasNameProp); // true - proprietatea "name" există în user
const hasWeightProp = "weight" in user;
console.log(hasWeightProp); // false - în user nu există proprietatea sau metoda cu numele "weight"
Prin expresia "name" in user verificăm dacă obiectul user are proprietatea "name", iar rezultatul verificării este atribuit constantei hasNameProp. Ulterior, verificăm similar existența proprietății "weight".
Similar, putem verifica și existența metodelor:
const hasPrintMethod = "print" in user;
console.log(hasPrintMethod); // true - în user există metoda "print"
O metodă alternativă constă în verificarea valorii undefined. Dacă o proprietate sau metodă este undefined, atunci aceasta nu este definită:
const hasNameProp = user.name!==undefined;
console.log(hasNameProp); // true
const hasWeightProp = user.weight!==undefined;
console.log(hasWeightProp); // false
Și deoarece obiectele sunt de tipul Object, având toate metodele și proprietățile acestuia, obiectele pot utiliza și metoda hasOwnProperty(), care este definită în tipul Object:
const hasNameProp = user.hasOwnProperty("name");
console.log(hasNameProp); // true
const hasPrintMethod = user.hasOwnProperty("print");
console.log(hasPrintMethod); // true
const hasWeightProp = user.hasOwnProperty("weight");
console.log(hasWeightProp); // false
Iterarea prin Proprietăți și Metode
Cu ajutorul unui ciclu for putem parcurge un obiect asemenea unui array și putea obține toate proprietățile și metodele sale, împreună cu valorile acestora:
const tom = {
name: "Tom",
age: 26,
print(){
console.log(``Name: ${this.name} Age: ${this.age}``);
}
};
for(const prop in tom) {
console.log(prop, " : ", tom[prop]);
}
Și, la rularea consolei în browser, se va afișa următorul rezultat:
name : Tom
age : 26
print : print(){
console.log(`Name: ${this.name} Age: ${this.age}`);
}
Funcții Object.entries, Object.keys, Object,values
Cu ajutorul funcțiilor suplimentare Object.entries, Object.keys și Object,values, poți obține toate proprietățile (inclusiv metodele) unui obiect și valorile acestora.
Object.entries()
Funcția Object.entries() primește un obiect ca parametru și returnează un array de perechi "nume_proprietate - valoare", unde fiecare pereche proprietate-valoare este reprezentată ca un array. De exemplu:
const tom = {
name: "Tom",
age: 26,
print(){
console.log(`Name: ${this.name} Age: ${this.age}`);
}
};
for(const prop of Object.entries(tom)) {
console.log(prop);
}
const tom = { name: "Tom", age: 26, print(){ console.log(`Name: ${this.name} Age: ${this.age}`); } }; for(const prop of Object.entries(tom)) { console.log(prop); }
Rezultatul în consolă:
["name", "Tom"]
["age", 26]
["print", ƒ]
Object.keys()
Funcția Object.keys() permite obținerea unui array cu numele tuturor proprietăților unui obiect. De exemplu, luăm obiectul tom definit mai sus:
const tom = {
name: "Tom",
age: 26,
print(){
console.log(`Name: ${this.name} Age: ${this.age}`);
}
};
console.log(Object.keys(tom)); // ["name", "age", "print"]
Prin urmare, poți parcurge această serie și obține valorile proprietăților:
for (const prop of Object.keys(tom)) {
const value = tom[prop]; // obținem valoarea proprietății pe baza numelui
console.log(prop, value);
}
Rezultatul în consolă:
name Tom
age 26
print ƒ print(){
console.log(`Name: ${this.name} Age: ${this.age}`);
}
Object.values()
Funcția Object.values() returnează un array care conține toate valorile proprietăților obiectului.
const tom = {
name: "Tom",
age: 26,
print(){
console.log(`Name: ${this.name} Age: ${this.age}`);
}
};
console.log(Object.values(tom)); // ["Tom", 26, print()]