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); // false
Como 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); // false
Iteraçã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.