Sobes.tech
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:

  1. instanceof operatörü, yapıcı fonksiyonun prototype'ının nesnenin prototip zincirinde olup olmadığını kontrol eder.
  2. Eğer prototype zincirde bulunuyorsa, sonuç true olur.
  3. Aksi takdirde, sonuç false olur.

Ö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çin true sonucu verebilir.
  • İlkel türler (string, number, boolean, null, undefined, symbol, bigint) için, instanceof genellikle false dö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.