Sempre vejo esses Memes de js de como a linguagem não funciona porque acontece tal coisa absurda, e normalmente é engraçado mas também pode fazer com que pessoas sem experiencia, como eu mesmo, se confundam ainda mais quando estão estudando.
Esse aqui não é nada diferente.
Como o operador "in" funciona: ele é busca se a chave existe no objeto.
const pirate = {
hat: "straw",
shoes: "flipflops",
power: "rubber",
};
// Defini o objeto pirate aqui. E preciso saber se ele tem poder.
if ("power" in pirate) { // TRUE
return "Esse pirata comeu uma fruta"
}
// Mas o objeto pirate poderia ser diferente.
const pirate = {
hat: "bandana",
shoes: "shoe",
weapon: "swords"
};
if ("power" in pirate) { // FALSE
return "Esse pirata comeu uma fruta"
}
O exemplo acima mostra um uso para o operador in, algo util porque muitas vezes podemos receber um objeto sem a chave e precisamos verificar isso.
E vejam, não existe nas propriedades nenhum "power" apenas nas chaves.
Ai você pode se perguntar: Mas então como funciona num array, se array não é um objeto?
Na verdade, o array é um objeto especial onde seus indices são as chaves.
const array = [1,2,3,4];
Object.keys(array) //[0,1,2,3]
const object = {
0: 1,
1: 2,
2: 3,
3: 4
}
typeof Array() // 'object'
E o javascript tenta não nos punir tanto, então quando passa o operador em um array ele faz essa conversão por baixo dos panos.
Assim como os casos de "0" e 0, porque ele transforma qualquer valor em string.
let number = 0;
let string = "0";
string === number.toString(10) // TRUE
Nas próximas vezes que ver um meme assim, antes de achar "Nossa, realmente não faz sentido" procure pelo motivo daquilo e vai perceber que é tudo esperado. E na maioria dos casos você nunca vai ver nenhum desses exemplos de meme na vida real.

Top comments (1)
Sabedoria desbalanceada