O método hasOwnProperty do JavaScript é usado para verificar se um determinado objeto possui uma propriedade específica.
A propriedade verificada pelo método hasOwnProperty é interna ao objeto em questão, ou seja, ela deve ter sido definida pelo usuário.
Se a propriedade passada para o hasOwnProperty existir no objeto, o método retorna true, do contrário, retorna false.
Exemplo 1:
Nesse exemplo, nós criamos o objeto person e adicionamos a propriedade name, logo em seguida, usamos o hasOwnProperty para verificar se essa propriedade faz parte do nosso objeto.
1var person = {
2 "name": "Brian",
3 "lastName": "Scott"
4};
5
6console.log( person.hasOwnProperty("name") );
Saída:
1true
Exemplo 2:
Nesse exemplo, vamos declarar um objeto com o nome car e atribuir uma propriedade a ele chamada doors, assim podemos usar o hasOwnProperty para verificar essa propriedade.
1var car = {
2 "doors": 4,
3 "engine": 2.0,
4 "color": "black"
5};
6
7var hasDoor = car.hasOwnProperty("doors");
8
9console.log(hasDoor);
Saída:
1true
Exemplo 3:
Aqui nós vamos, propositalmente, errar o nome da propriedade do nosso objeto para que o método hasOwnProperty retorne false.
1var shoppingCart = {
2 "fruits": true,
3 "bread": false
4};
5
6var hasFruits = shoppingCart.hasOwnProperty("fruites");
7
8console.log(hasFruits);
Saída:
1false
Por que é importante usar o método hasOwnProperty?
Vamos analisar a importância de usar o método hasOwnProperty para verificar se uma propriedade existe dentro de um objeto em JavaScript.
Tudo em JavaScript é um objeto.
Isso mesmo, qualquer elemento criado no JavaScript é considerado um objeto. Números, Strings de texto, Arrays e qualquer outro tipo de dado do JavaScript herda propriedades de um objeto superior.
Exemplo 1:
O tipo de dado numérico em JavaScript é considerado um objeto.
1var number = 10.22333;
2var otherNumber = number.toPrecision(3);
3
4console.log(otherNumber);
Saída:
110.2
Exemplo 2:
O tipo de dado string, também é considerado um objeto.
1var name = "Peter Max";
2var char = name.charAt(2);
3
4console.log(char);
Saída:
1t
Exemplo 3:
Até arrays em JavaScript são objetos.
1var cars = ["BMW", "Audi", "Aston Martin"];
2
3var carIndexNumber = cars.indexOf("BMW");
4
5console.log(carIndexNumber);
Saída:
10
Nos exemplos anteriores, todos os objetos herdam propriedades do objeto principal, o Object.
O comando “in” em JavaScript
Normalmente os programadores novatos em JavaScript usam o comando in para verificar se uma propriedade existe em um determinado objeto.
Exemplo:
1var car = {
2 "doors": 2,
3 "engine": 1.2,
4 "color": "yellow"
5};
6
7if ("engine" in car) {
8 console.log("true");
9} else {
10 console.log("false");
11}
Saída:
1true
O problema é que o comando in é abrangente. Ele fará uma busca por todas as propriedades do objeto. As propriedades criadas pelo usuário e as propriedades herdadas do objeto superior são incluídas na checagem.
Isso pode causar um erro de lógica se por acaso o programador executar um pedaço do código somente se uma propriedade do objeto existir.
Mas o programador quer verificar uma propriedade padrão do objeto? Ou uma propriedade criada pelo usuário?
Exemplo:
1var car = {
2 "doors": 2,
3 "engine": 1.2,
4 "color": "yellow"
5};
6
7if ("toString" in car) {
8 console.log("true");
9} else {
10 console.log("false");
11}
Saída:
1true
No exemplo anterior, o comando in retorna true, ou seja, ele considera que a propriedade toString existe no nosso objeto, mesmo que essa propriedade não tenha sido declarada por nós.
A propriedade/método toString é herdade do objeto superior. Para evitar essa confusão sempre use o método hasOwnProperty.
Exemplo:
1var car = {
2 "doors": 2,
3 "engine": 1.2,
4 "color": "yellow"
5};
6
7if ( car.hasOwnProperty("toString") ) {
8 console.log("true");
9} else {
10 console.log("false");
11}
Saída:
1false
Agora o retorno foi o valor false. Isso porque, como vimos anteriormente, o método hasOwnProperty, somente pesquisa as propriedades definidas pelo usuário.