Sobes.tech
Junior

JavaScript-də instanceof operatoru nəyi yoxlayır?

sobes.tech Süni İntellekt

AI-dan cavab

JavaScript-də instanceof operatoru obyektin müəyyən bir sinf və ya konstruktora aid olub-olmadığını yoxlayır.

İş prinsipi:

  1. instanceof operatoru, konstruktorun prototype-inin obyektin prototip zəncirində olub-olmadığını yoxlayır.
  2. Əgər prototype zəncirdədirsə, nəticə true olur.
  3. Əks halda, nəticə false olur.

Misallar:

// Sinif yaradırıq
class Animal {
  // Konstruktor
  constructor(name) {
    this.name = name;
  }
}

// Sinifin nümunəsini yaradırıq
let dog = new Animal("Buddy");

// dog-un Animal sinfinin nümunəsi olub-olmadığını yoxlayırıq
console.log(dog instanceof Animal); // true

// dog-un Object sinfinin nümunəsi olub-olmadığını yoxlayırıq (prototip zənciri vasitəsilə)
console.log(dog instanceof Object); // true

// dog-un Array sinfinin nümunəsi olub-olmadığını yoxlayırıq (deyil)
console.log(dog instanceof Array); // false

// Daxili tiplərlə yoxlama
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 (primitivlər üçün, `instanceof` xüsusi davranır)
// `new` ilə yaradılan primitivlər üçün
let numObj = new Number(123);
console.log(numObj instanceof Number); // true

Xüsusiyyətlər:

  • instanceof prototip zənciri vasitəsilə işləyir, ona görə də nəticə true ola bilər, hətta valideyn konstruktorlara da.
  • Primitiv tiplər üçün (string, number, boolean, null, undefined, symbol, bigint), instanceof adətən false qaytarır, əgər onlar müvafiq obyekt-örtük ilə yaradılmayıbsa (new String(), new Number(), və s.).
  • JavaScript-in müxtəlif icra mühitlərində (məsələn, fərqli pəncərələr və ya iframe-lər) işləyərkən, hər mühitin öz konstruktorları olduğu üçün bu metod tam dəqiq olmaya bilər.

Oxşar yanaşmalar:

  • typeof: əsas məlumat tipini göstərən sətir qaytarır (string, number, boolean, object, function, undefined, symbol, bigint). Xüsusi sinfə aid olub-olmadığını yoxlamaq üçün uyğun deyil.
  • Object.prototype.toString.call(): obyektin tipini daha dəqiq göstərən sətir qaytarır ("[object Array]", "[object Date]", və s.).

Ümumiyyətlə, instanceof obyektin müəyyən bir sinfə və ya onun atasına aid olub-olmadığını yoxlamaqda faydalıdır.