Scopri come utilizzare il metodo hasOwnProperty di JavaScript

Il metodo hasOwnProperty di JavaScript viene utilizzato per verificare se un determinato oggetto ha una proprietà specifica.

La proprietà verificata dal metodo hasOwnProperty è interna all’oggetto in questione, ovvero deve essere stata definita dall’utente.

Se la proprietà passata a hasOwnProperty esiste sull’oggetto, il metodo restituisce true , altrimenti restituisce false .

Esempio 1:

In questo esempio, creiamo l' oggetto person e aggiungiamo la proprietà name , quindi utilizziamo hasOwnProperty per verificare che questa proprietà faccia parte del nostro oggetto.

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

Uscita:

1true

Esempio 2:

In questo esempio, dichiariamo un oggetto chiamato car e gli assegneremo una proprietà chiamata porte , così possiamo usare hasOwnProperty per controllare questa proprietà.

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

Uscita:

1true

Esempio 3:

Qui cercheremo di scrivere in modo errato di proposito il nome della proprietà del nostro oggetto in modo che il metodo hasOwnProperty restituisca false .

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

Uscita:

1false

Perché è importante utilizzare il metodo hasOwnProperty?

Diamo un’occhiata all’importanza di utilizzare il metodo hasOwnProperty per verificare se esiste una proprietà all’interno di un oggetto in JavaScript.

Tutto in JavaScript è un oggetto.

Esatto, qualsiasi elemento creato in JavaScript è considerato un oggetto. Numeri, stringhe di testo, matrici e qualsiasi altro tipo di dati JavaScript ereditano le proprietà da un oggetto padre.

Esempio 1:

Il tipo di dati numerico in JavaScript è considerato un oggetto.

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

Uscita:

110.2

Esempio 2:

Anche il tipo di dati stringa è considerato un oggetto.

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

Uscita:

1t

Esempio 3:

Anche gli array in JavaScript sono oggetti.

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

Uscita:

10

Negli esempi precedenti, tutti gli oggetti ereditano le proprietà dall’oggetto principale, Object.

Il comando “in” in JavaScript

I nuovi programmatori JavaScript in genere utilizzano il comando in per verificare se esiste una proprietà su un determinato oggetto.

Esempio:

 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}

Uscita:

1true

Il problema è che il comando in è completo. Farà una ricerca per tutte le proprietà dell’oggetto. Le proprietà create dall’utente e le proprietà ereditate dall’oggetto padre sono incluse nel controllo.

Ciò può causare un errore logico se il programmatore esegue una parte di codice solo se esiste una proprietà dell’oggetto.

Ma il programmatore vuole controllare una proprietà di default dell’oggetto? O una proprietà creata dall’utente?

Esempio:

 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}

Uscita:

1true

Nell’esempio precedente, il comando in restituisce true , ovvero presuppone che la proprietà toString esista nel nostro oggetto, anche se questa proprietà non è stata dichiarata da noi.

La proprietà/metodo toString viene ereditata dall’oggetto padre. Per evitare questa confusione, utilizzare sempre il metodo hasOwnProperty .

Esempio:

 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}

Uscita:

1false

Ora il ritorno era il valore false . Questo perché, come abbiamo visto in precedenza, il metodo hasOwnProperty cerca solo le proprietà definite dall’utente.