Mempertimbangkan:
if (someVar.hasOwnProperty('someProperty') ) {
// Do something();
} else {
// Do somethingElse();
}
Penggunaan / penjelasan apa yang benar hasOwnProperty('someProperty')
?
Mengapa kita tidak bisa begitu saja menggunakan someVar.someProperty
untuk memeriksa apakah suatu objek someVar
berisi properti dengan nama someProperty
?
Apa properti dalam kasus ini?
Properti apa yang diperiksa JavaScript ini?
javascript
object
hasownproperty
TERBANG
sumber
sumber
Jawaban:
hasOwnProperty
mengembalikan nilai boolean yang menunjukkan apakah objek yang Anda panggil memiliki properti dengan nama argumen. Sebagai contoh:var x = { y: 10 }; console.log(x.hasOwnProperty("y")); //true console.log(x.hasOwnProperty("z")); //false
Namun, itu tidak melihat rantai prototipe objek.
Ini berguna untuk menggunakannya saat Anda menghitung properti objek dengan
for...in
konstruksi.Jika Anda ingin melihat detail selengkapnya, spesifikasi ES5 , seperti biasa, adalah tempat yang bagus untuk melihat.
sumber
window
eval
kode daripada kode global atau fungsi). Saya mencobanya di halaman HTML kosong dan mendapatkan error "tidak dapat mengubah null menjadi objek".Berikut adalah jawaban singkat dan tepat:
Di JavaScript, setiap objek memiliki sekumpulan key-value pair bawaan yang memiliki informasi meta tentang objek tersebut. Saat Anda mengulang semua pasangan nilai kunci menggunakan
for...in
konstruksi / putaran untuk objek, Anda juga mengulang melalui pasangan nilai kunci meta-informasi ini (yang pasti tidak Anda inginkan).Menggunakan
hasOwnPropery(property)
filter-out perulangan yang tidak perlu ini melalui informasi meta dan secara langsung memeriksa apakah parameterproperty
adalah properti yang diberikan pengguna di objek atau tidak. Dengan filter-out , maksud saya, ituhasOwnProperty(property)
tidak terlihat jika,property
ada di rantai prototipe Object alias informasi meta.Ia mengembalikan boolean
true/false
berdasarkan itu.Berikut ini contohnya:
var fruitObject = {"name": "Apple", "shape": "round", "taste": "sweet"}; console.log(fruitObject.hasOwnProperty("name")); //true console.log(Object.prototype.hasOwnProperty("toString");) //true because in above snapshot you can see, that there is a function toString in meta-information
Saya harap ini jelas!
sumber
console.log(Object.prototype....
; yang Anda maksudconsole.log(fruitObject.
? fruitObject atau Object?for (var key in fruitObject) { ... }
js hanya siklus melalui kunci non-prototipe, apakah saya melewatkan sesuatu atau apakah runtime JS mengubah cara mereka menangani kunci-dalam-objek loop?Ia memeriksa:
Mengembalikan nilai Boolean yang menunjukkan apakah suatu objek memiliki properti dengan nama yang ditentukan
The hasOwnProperty kembali metode yang benar jika objek memiliki properti nama tertentu, false jika tidak. Metode ini tidak memeriksa apakah properti ada di rantai prototipe objek; properti harus menjadi anggota dari objek itu sendiri.
Contoh:
var s = new String("Sample"); document.write(s.hasOwnProperty("split")); //false document.write(String.prototype.hasOwnProperty("split")); //true
sumber
Ringkasan:
hasOwnProperty()
adalah fungsi yang dapat dipanggil pada objek apa pun dan menggunakan string sebagai input. Ini mengembalikan boolean yangtrue
jika properti terletak pada objek, jika tidak, mengembalikan salah.hasOwnProperty()
terletak diObject.prototype
dan dengan demikian tersedia untuk objek apa pun.Contoh:
function Person(name) { this.name = name; } Person.prototype.age = 25; const willem = new Person('willem'); console.log(willem.name); // Property found on object console.log(willem.age); // Property found on prototype console.log(willem.hasOwnProperty('name')); // 'name' is on the object itself console.log(willem.hasOwnProperty('age')); // 'age' is not on the object itself
Dalam contoh ini, objek Person baru dibuat. Setiap Orang memiliki namanya sendiri yang diinisialisasi di konstruktor. Akan tetapi, umur tidak terletak pada objek tetapi pada prototipe objek tersebut. Oleh karena
hasOwnProperty()
itu, kembalitrue
untuk nama danfalse
usia.Aplikasi praktis:
hasOwnProperty()
bisa sangat berguna saat mengulang objek menggunakanfor in
loop. Anda dapat memeriksanya jika properti berasal dari objek itu sendiri dan bukan prototipe. Sebagai contoh:function Person(name, city) { this.name = name; this.city = city; } Person.prototype.age = 25; const willem = new Person('Willem', 'Groningen'); for (let trait in willem) { console.log(trait, willem[trait]); // This loops through all properties, including the prototype } console.log('\n'); for (let trait in willem) { if (willem.hasOwnProperty(trait)) { // This loops only through 'own' properties of the object console.log(trait, willem[trait]); } }
sumber
Anda menggunakan object.hasOwnProperty ( p ) untuk menentukan apakah sebuah objek memiliki properti enumerable p -
Sebuah objek dapat memiliki prototipe sendiri, di mana metode dan atribut 'default' ditetapkan ke setiap instance objek. hasOwnProperty mengembalikan nilai true hanya untuk properti yang secara khusus ditetapkan dalam konstruktor, atau ditambahkan ke instance nanti.
Untuk menentukan apakah p didefinisikan sama sekali, di mana saja, untuk objek tersebut, gunakan if ( p instanceof object), di mana p mengevaluasi ke string nama-properti.
Misalnya, secara default semua objek memiliki metode 'toString', tetapi tidak akan muncul di hasOwnProperty.
sumber
hasOwnProperty adalah fungsi JavaScript normal yang menggunakan argumen string.
Dalam kasus Anda
somevar.hasOwnProperty('someProperty')
, itu memeriksasomevar
fungsi memilikisomepropery
atau tidak - itu mengembalikan benar dan salah.Mengatakan
function somevar() { this.someProperty = "Generic"; } function welcomeMessage() { var somevar1 = new somevar(); if(somevar1.hasOwnProperty("name")) { alert(somevar1.hasOwnProperty("name")); // It will return true } }
sumber
hasOwnProperty
adalah cara yang tepat untuk memeriksa suatu benda memiliki properti atau tidak.someVar.someProperty
tidak dapat digunakan sebagai alternatif untuk situasi ini. Kondisi berikut akan menunjukkan perbedaan yang baik:const someVar = { isFirst: false }; // The condition is true, because 'someVar' has property 'isFirst' if (someVar.hasOwnProperty('isFirst')) { // Code runs } // The condition is false, because 'isFirst' is false. if (someVar.isFirst) { // Code does not runs here }
Karenanya
someVar.isFirst
tidak dapat digunakan alternatifsomeVar.hasOwnProperty('isFirst')
.sumber
Adegan A:
const objA = { a: 1, b: 2 } for (const key in objA) { if (objA.hasOwnProperty(key)) { console.log(objA[key]) } } Output 1 2
Adegan B:
const objB = { a: 1, b: 2, hasOwnProperty() { return false } } for (const key in objB) { if (objB.hasOwnProperty(key)) { console.log(objB[key]) } } Outputs nothing
Karena JavaScript tidak melindungi properti hasOwnProperty. Jadi Anda bisa menggunakannya seperti ini:
for (const key in objB) { if (Object.prototype.hasOwnProperty.call(obj, key)) { console.log(objB[key]) } }
sumber
Ia memeriksa apakah suatu objek memiliki properti . Ini berfungsi sama
if(obj.prop)
, sejauh yang saya tahu.sumber
obj.prop
mengikuti rantai prototipe,hasOwnProperty
tidakprop
memiliki nilai palsu.if(obj.hasOwnProperty('prop'))
akantrue
sementaraif(obj.prop)
akanfalse
.