Mana yang Lebih Baik: obj.hasOwnProperty(prop) vs Object.keys(obj). includes(prop)
Tags: javascript, beginners, node, indonesia
Published: 2024-02-05 13:17:39

Dalam pemrograman JavaScript, kedua metode ini sama-sama digunakan untuk memeriksa apakah sebuah objek memiliki properti tertentu.

Jika fungsi nya sama, lantas metode mana yang pantas kita gunakan?

Sebelum memilih antara kedua metode tersebut, kita coba pahami dulu fokus dari masing-masing metode.

## obj.hasOwnProperty(prop)

Metode ini langsung memeriksa apakah objek memiliki properti yang diberikan sebagai properti yang dimilikinya sendiri (bukan turunan dari prototype). Maksud dari (bukan turunan dari prototype), yaitu setiap objek yang dibuat memiliki referensi ke objek lain yang disebut "prototype".

Objek "prototype" adalah objek yang digunakan sebagai basis untuk mencari properti atau metode yang mungkin tidak langsung ditemukan di objek tersebut. Hal ini berhubungan dengan konteks pemrograman berorientasi objek.

```javascript
const myObj = {
  name: 'Ferry',
  age: 23,
  city: 'Balikpapan'
};

const propName = 'age';

if (myObj.hasOwnProperty(propName)) {
  console.log(`Objek memiliki properti ${propName}`);
} else {
  console.log(`Objek tidak memiliki properti ${propName}`);
}
```

![Contoh penggunaan myObj.hasOwnProperty](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5cfkx5gfh5rpete1ioz6.png)

Keuntungan: Lebih spesifik dan efisien jika kita hanya ingin memeriksa properti yang benar-benar dimiliki oleh objek tersebut dan bukan dari rantai prototipe.

Penggunaan Umum: Sering digunakan dalam kasus di mana kita ingin memastikan bahwa properti yang diperiksa benar-benar ada dalam objek dan bukan merupakan properti turunan dari prototype.

## Object.keys(obj).includes(prop)

Object.keys(obj) akan mengembalikan array dari semua properti yang dapat di enumerasi dari objek, termasuk properti dari prototype-nya. includes(prop) kemudian memeriksa apakah properti yang diberikan ada dalam array tersebut.

```javascript
const myObj = {
  name: 'Ferry',
  age: 23,
  city: 'Balikpapan'
};

const propName = 'age';

if (Object.keys(myObj).includes(propName)) {
  console.log(`Objek memiliki properti ${propName}`);
} else {
  console.log(`Objek tidak memiliki properti ${propName}`);
}
```

![Contoh Penggunaan Object.keys](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7z07jvm45s8j8wtu5cga.png)

Keuntungan: Berguna jika kita ingin memeriksa apakah objek memiliki properti tertentu, termasuk properti dari rantai prototipe.

Penggunaan Umum: Digunakan ketika kita ingin memeriksa apakah objek memiliki properti atau metode tertentu, termasuk yang diteruskan dari prototype.

## Kesimpulan

Secara teknis, obj.hasOwnProperty(prop) digunakan untuk memeriksa apakah suatu properti langsung dimiliki oleh objek, sedangkan Object.keys(obj).includes(prop) mengembalikan array dari semua properti enumerable dalam objek dan kemudian memeriksa apakah properti tersebut ada dalam array tersebut.

Dari segi performa, obj.hasOwnProperty(prop) umumnya dianggap lebih cepat karena hanya melakukan pemeriksaan langsung pada objek tanpa perlu membuat array dari semua properti. Di sisi lain, Object.keys(obj).includes(prop) dapat menjadi lebih lambat karena melibatkan pembuatan array terlebih dahulu sebelum melakukan pengecekan.

Namun, perbedaan performa ini mungkin tidak signifikan dalam skenario kebanyakan. Pemilihan antara keduanya dapat didasarkan pada kebutuhan spesifik dan apakah perlu mempertimbangkan enumerable properti atau tidak. Jika performa kritis, obj.hasOwnProperty(prop) dapat menjadi pilihan yang lebih efisien.