Bagaimana saya bisa menentukan apakah suatu objek x
memiliki properti yang ditentukan y
, terlepas dari nilai x.y
?
Saya sedang menggunakan
if (typeof(x.y) !== 'undefined')
tapi itu agak kikuk. Apakah ada cara yang lebih baik?
javascript
object
royhowie
sumber
sumber
Object.prototype.hasOwnProperty.call(x, 'y')
, sehingga properti yang bernama "hasOwnProperty" tidak akan bertentangan dengan proses pemeriksaan;){}.hasOwnProperty.call(x, 'y')
.Jika Anda ingin tahu apakah objek tersebut secara fisik berisi jawaban properti @ gnarf menggunakan
hasOwnProperty
akan melakukan pekerjaan.Jika Anda ingin tahu apakah properti itu ada di mana saja, baik pada objek itu sendiri atau di rantai prototipe, Anda dapat menggunakan
in
operator .Misalnya.:
sumber
Underscore.js atau Lodash
:)
sumber
Object.prototype.hasOwnProperty.call(x, "y")
. Untuk array Saya pikir Anda mungkin inginArray.prototype.indexOf
,_.indexOf
atau_.contains
Anda dapat memotongnya sedikit seperti ini:
sumber
x = {y:undefined}
Salah satu fitur kode asli saya
yang mungkin berguna dalam beberapa situasi adalah bahwa aman digunakan apakah
x
ada atau tidak. Dengan salah satu metode dalam jawaban gnarf, pertama-tama orang harus mengujix
apakah ada keraguan apakah itu ada.Jadi mungkin ketiga metode ini memiliki tempat dalam satu tas trik.
sumber
(x && x.hasOwnProperty('y'))
atau(x && 'y' in x)
ReferenceError
daripada string 'tidak terdefinisi'Karena pertanyaannya adalah tentang kejanggalan dari pengecekan properti, dan satu kasus penggunaan reguler untuk itu menjadi validasi objek opsi argumen fungsi, saya pikir saya akan menyebutkan cara singkat bebas perpustakaan untuk menguji keberadaan beberapa properti. Penafian: Itu memang membutuhkan ECMAScript 5 (tapi IMO siapa pun yang masih menggunakan IE8 layak web yang rusak).
sumber
Mengapa tidak secara sederhana:
Atau jika Anda mengharapkan jenis tertentu:
sumber
x.hasOwnProperty('y')
?