Aprenda a usar el método hasOwnProperty() de JavaScript

El método hasOwnProperty de JavaScript se usa para verificar si un objeto dado tiene una propiedad específica.

La propiedad comprobada por el método hasOwnProperty es interna al objeto en cuestión, es decir, debe haber sido definida por el usuario.

Si la propiedad pasada a hasOwnProperty existe en el objeto, el método devuelve true , de lo contrario, devuelve false .

Ejemplo 1:

En este ejemplo, creamos el objeto persona y agregamos la propiedad de nombre , luego usamos hasOwnProperty para verificar que esta propiedad es parte de nuestro objeto.

1var person = {
2    "name": "Brian",
3    "lastName": "Scott"
4};
5
6console.log( person.hasOwnProperty("name") );

Salida:

1true

Ejemplo 2:

En este ejemplo, vamos a declarar un objeto llamado auto y asignarle una propiedad llamada puertas , por lo que podemos usar hasOwnProperty para verificar esta propiedad.

1var car = {
2    "doors": 4,
3    "engine": 2.0,
4    "color": "black"
5};
6
7var hasDoor = car.hasOwnProperty("doors");
8
9console.log(hasDoor);

Salida:

1true

Ejemplo 3:

Aquí escribiremos mal a propósito el nombre de la propiedad de nuestro objeto para que el método hasOwnProperty devuelva false .

1var shoppingCart = {
2    "fruits": true,
3    "bread": false
4};
5
6var hasFruits = shoppingCart.hasOwnProperty("fruites");
7
8console.log(hasFruits);

Salida:

1false

¿Por qué es importante usar el método hasOwnProperty?

Veamos la importancia de usar el método hasOwnProperty para verificar si existe una propiedad dentro de un objeto en JavaScript.

Todo en JavaScript es un objeto.

Así es, cualquier elemento creado en JavaScript se considera un objeto. Números, cadenas de texto, matrices y cualquier otro tipo de datos de JavaScript heredan propiedades de un objeto principal.

Ejemplo 1:

El tipo de datos numérico en JavaScript se considera un objeto.

1var number = 10.22333;
2var otherNumber = number.toPrecision(3);
3
4console.log(otherNumber);

Salida:

110.2

Ejemplo 2:

El tipo de datos de cadena también se considera un objeto.

1var name = "Peter Max";
2var char = name.charAt(2);
3
4console.log(char);

Salida:

1t

Ejemplo 3:

Incluso las matrices en JavaScript son objetos.

1var cars = ["BMW", "Audi", "Aston Martin"];
2
3var carIndexNumber = cars.indexOf("BMW");
4
5console.log(carIndexNumber);

Salida:

10

En los ejemplos anteriores, todos los objetos heredan propiedades del objeto principal, Object.

El comando “in” en JavaScript

Los nuevos programadores de JavaScript suelen utilizar el comando in para comprobar si existe una propiedad en un objeto determinado.

Ejemplo:

 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}

Salida:

1true

El problema es que el comando in es completo. Hará una búsqueda de todas las propiedades del objeto. Las propiedades creadas por el usuario y las propiedades heredadas del objeto principal se incluyen en la verificación.

Esto puede causar un error lógico si el programador ejecuta un fragmento de código sólo si existe una propiedad de objeto.

¿Pero el programador quiere verificar una propiedad predeterminada del objeto? ¿O una propiedad creada por el usuario?

Ejemplo:

 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}

Salida:

1true

En el ejemplo anterior, el comando in devuelve verdadero , es decir, asume que la propiedad toString existe en nuestro objeto, aunque esta propiedad no haya sido declarada por nosotros.

La propiedad/método toString se hereda del objeto principal. Para evitar esta confusión, utilice siempre el método hasOwnProperty .

Ejemplo:

 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}

Salida:

1false

Ahora el retorno fue el valor falso . Esto se debe a que, como vimos anteriormente, el método hasOwnProperty solo busca propiedades definidas por el usuario.