Junior
JavaScript'te instanceof operatörü neyi kontrol eder?
sobes.tech yapay zeka
AI'dan gelen yanıt
JavaScript'te instanceof operatörü, bir nesnenin belirli bir sınıfın veya yapıcı fonksiyonun örneği olup olmadığını kontrol eder.
Çalışma prensibi:
instanceofoperatörü, yapıcı fonksiyonunprototype'ının nesnenin prototip zincirinde olup olmadığını kontrol eder.- Eğer
prototypezincirde bulunuyorsa, sonuçtrueolur. - Aksi takdirde, sonuç
falseolur.
Örnekler:
// Bir sınıf oluşturuyoruz
class Animal {
// Yapıcı fonksiyon
constructor(name) {
this.name = name;
}
}
// Sınıfın örneğini oluşturuyoruz
let dog = new Animal("Buddy");
// dog'un Animal sınıfının örneği olup olmadığını kontrol et
console.log(dog instanceof Animal); // true
// dog'un Object sınıfının örneği olup olmadığını kontrol et (prototip zinciri aracılığıyla)
console.log(dog instanceof Object); // true
// dog'un Array sınıfının örneği olup olmadığını kontrol et (değil)
console.log(dog instanceof Array); // false
// Yerleşik türlerle kontrol
let arr = [1, 2, 3];
console.log(arr instanceof Array); // true
console.log(arr instanceof Object); // true
let num = 123;
console.log(num instanceof Number); // false (ilkel değerler için instanceof özel davranır)
// new ile oluşturulan ilkel değerler
let numObj = new Number(123);
console.log(numObj instanceof Number); // true
Özellikler:
instanceof, prototip zinciri aracılığıyla çalışır, bu nedenle ebeveyn yapıcılar içintruesonucu verebilir.- İlkel türler (string, number, boolean, null, undefined, symbol, bigint) için,
instanceofgenelliklefalsedöner, eğer uygun nesne sarmalayıcıyla (new String(),new Number(), vb.) oluşturulmamışsa. - JavaScript'in farklı yürütme bağlamlarında (örneğin, farklı tarayıcı pencereleri veya iframe'ler) çalışırken, her bağlamın kendi yapıcıları olduğu için bu yöntem tam güvenilir olmayabilir.
Benzer yaklaşımlar:
typeof: Temel veri tipini belirten bir dize döner (string, number, boolean, object, function, undefined, symbol, bigint). Belirli bir sınıfa ait olup olmadığını kontrol etmek için uygun değildir.Object.prototype.toString.call(): Nesnenin tipini daha doğru şekilde belirten bir dize döner ("[object Array]","[object Date]", vb.).
Genel olarak, instanceof belirli bir nesnenin sınıfa veya kalıtım hiyerarşisindeki atasına ait olup olmadığını kontrol etmekte kullanışlıdır.