Verificando a Existência e Iteração de Métodos e Propriedades em JavaScript
Em JavaScript, antes de usar novas propriedades ou métodos definidos dinamicamente em um objeto, é essencial verificar se eles já existem. O operador in é frequentemente utilizado para isso. Sua sintaxe é simples:
"propriedade|metodo" in objeto;Aqui, o nome da propriedade ou método é colocado entre aspas e após o in vem o nome do objeto. Se o objeto possui uma propriedade ou método com esse nome, o operador retorna true; caso contrário, retorna false.
Por exemplo, para verificar a existência de algumas propriedades no objeto:
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 - a propriedade 'name' existe em 'user'
const hasWeightProp = "weight" in user;
console.log(hasWeightProp); // false - 'user' não possui propriedade ou método chamado 'weight'Da mesma forma, podemos verificar a existência de métodos:
const hasPrintMethod = "print" in user;
console.log(hasPrintMethod); // true - 'user' possui o método 'print'Um método alternativo consiste em verificar o valor undefined. Se a propriedade ou método for igual a undefined, então não está definido:
const hasNameProp = user.name !== undefined;
console.log(hasNameProp); // true
const hasWeightProp = user.weight !== undefined;
console.log(hasWeightProp); // falseComo os objetos são do tipo Object, eles podem usar o método hasOwnProperty(), que verifica se a propriedade especificada é uma propriedade direta do objeto:
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); // falseIteração sobre Propriedades e Métodos
Com um loop for, podemos iterar sobre um objeto como se fosse um array, acessando todas as suas propriedades e métodos e seus valores:
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]);
}Saída no navegador:
name : Tom
age : 26
print : ƒ () {
console.log(`Name: ${this.name} Age: ${this.age}`);
}As Funções Object.entries, Object.keys, Object.values
As funções adicionais Object.entries, Object.keys e Object.values permitem acessar todas as propriedades (incluindo métodos) de um objeto e seus valores.
Object.entries()
A função Object.entries() recebe um objeto como parâmetro e retorna um array de pares "nome da propriedade - valor":
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);
}Saída no navegador:
["name", "Tom"] ["age", 26] ["print", ƒ]
Object.keys()
A função Object.keys() retorna um array com os nomes de todas as propriedades de um objeto:
const tom = {
name: "Tom",
age: 26,
print() {
console.log(`Name: ${this.name} Age: ${this.age}`);
},
};
console.log(Object.keys(tom)); // ["name", "age", "print"]Consequentemente, é possível iterar sobre este conjunto e obter os valores das propriedades:
for (const prop of Object.keys(tom)) {
console.log(prop, " : ", tom[prop]);
}Saída no console:
name : Tom
age : 26
print : ƒ () {
console.log(`Name: ${this.name} Age: ${this.age}`);Object.values()
A função Object.values() retorna um array que contém todos os valores das propriedades de um objeto:
const tom = {
name: "Tom",
age: 26,
print() {
console.log(`Name: ${this.name} Age: ${this.age}`);
},
};
console.log(Object.values(tom)); // ["Tom", 26, function print()]Essas funções fornecem métodos úteis para manipular e interagir com objetos em JavaScript.