Saya memeriksa keberadaan properti objek dengan variabel yang menahan nama properti yang dimaksud.
var myObj;
myObj.prop = "exists";
var myProp = "p"+"r"+"o"+"p";
if(myObj.myProp){
alert("yes, i have that property");
};
Ini undefined
karena mencari, myObj.myProp
tetapi saya ingin memeriksanyamyObj.prop
javascript
object
Kreatif Slopeside
sumber
sumber
hasOwnProperty
metode ini ditimpa, Anda dapat mengandalkannyaObject.prototype.hasOwnProperty.call(object, property)
."Jawaban:
Atau
Atau
Catatan yang
hasOwnProperty
tidak memeriksa properti yang diwarisi, sedangkan yangin
tidak. Misalnya'constructor' in myObj
itu benar, tetapimyObj.hasOwnProperty('constructor')
tidak.sumber
hasOwnProperty()
lebih baikmyObj[myProp]
(dari jawaban lain) karena berfungsi bahkan jika nilainyamyProp
0'qqq'.hasOwnProperty('length')
adalahtrue
, Anda bisa melakukannya.myProp
0, pernyataan if akan terlihat sepertiif (myObj[0])
jikamyObj
memiliki properti sama sekali, ekspresi akan dievaluasitrue
. DanmyObj[0]
mungkin bukan properti yang Anda cari.Anda dapat menggunakan hasOwnProperty , tetapi berdasarkan referensi Anda perlu mengutip ketika menggunakan metode ini:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Cara lain adalah dengan menggunakan di operator, tetapi Anda perlu tanda kutip di sini juga:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
sumber
hasOwnProperty()
diimplementasikan.Terima kasih atas bantuan semua orang dan mendorong untuk menyingkirkan pernyataan eval. Variabel harus dalam kurung, bukan notasi titik. Ini berfungsi dan bersih, kode yang tepat.
Masing-masing adalah variabel: appChoice, underI, underObstr.
sumber
tData.tonicdata[appChoice]
menghasilkan nilai yang tidak memiliki properti / indeks yang cocokunderI
, maka ini akan menghasilkanTypeError
pelemparan.Untuk properti sendiri:
Catatan: menggunakan Object.prototype.hasOwnProperty lebih baik daripada pinjaman.hasOwnProperty (..), dalam kasus kustom hasOwnProperty didefinisikan dalam rantai prototipe (yang tidak terjadi di sini), seperti
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Untuk menyertakan properti yang diwarisi dalam temuan, gunakan operator in : (tetapi Anda harus menempatkan objek di sisi kanan 'in', nilai primitif akan melempar kesalahan, misalnya 'panjang' di 'rumah' akan melempar kesalahan, tetapi 'panjang' di String baru ('rumah') tidak akan)
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
Catatan: Seseorang mungkin tergoda untuk menggunakan typeof dan [] accessor properti sebagai kode berikut yang tidak berfungsi selalu ...
sumber
Cara yang jauh lebih aman untuk memeriksa apakah properti ada pada objek adalah dengan menggunakan objek kosong atau prototipe objek untuk memanggil
hasOwnProperty()
Referensi dari MDN Web Documents - Object.prototype.hasOwnProperty ()
sumber
hasOwnProperty
, tidak ada jumlah penjaga seperti ini yang akan membuat kode Anda aman atau aman.Anda dapat menggunakan
hasOwnProperty()
sertain
operator.sumber