Sobes.tech
Junior

JavaScriptda instanceof operatori nima tekshiradi?

sobes.tech AI

AIdan javob

JavaScriptda instanceof operatori, obyekt ma ma'lum bir sinf yoki konstruktorning nusxasi ekanligini tekshiradi.

Ishlash prinsipi:

  1. instanceof operatori, konstruktorning prototype'sini obyektning prototip zanjirida mavjudligini tekshiradi.
  2. Agar prototype zanjirda mavjud bo'lsa, natija true bo'ladi.
  3. Aks holda, natija false bo'ladi.

Misollar:

// Sinf yaratamiz
class Animal {
  // Konstruktor
  constructor(name) {
    this.name = name;
  }
}

// Sinf nusxasini yaratamiz
let dog = new Animal("Buddy");

// dog obyektining Animal sinfining nusxasi ekanligini tekshirish
console.log(dog instanceof Animal); // true

// dog obyektining Object sinfining nusxasi ekanligini tekshirish (prototip zanjiri orqali)
console.log(dog instanceof Object); // true

// dog obyektining Array sinfining nusxasi ekanligini tekshirish (emas)
console.log(dog instanceof Array); // false

// Ichki turlar bilan tekshirish
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 (primitiivlar uchun, instanceof maxsus ishlaydi)
// `new` bilan yaratilgan primitiivlar uchun
let numObj = new Number(123);
console.log(numObj instanceof Number); // true

Xususiyatlar:

  • instanceof prototip zanjiri orqali ishlaydi, shuning uchun natija true bo'lishi mumkin, hatto ota-klasslar uchun ham.
  • Primitiiv turlar (string, number, boolean, null, undefined, symbol, bigint) uchun, instanceof odatda false qaytaradi, agar ular mos keladigan ob'ekt bilan yaratilmagan bo'lsa (new String(), new Number(), va hokazo).
  • JavaScriptning turli bajarilish kontekstlarida (masalan, turli brauzer oynalari yoki iframe'lar) ishlashda, har bir kontekst o'z konstruktorlariga ega bo'lgani uchun, bu usul to'g'ri bo'lmasligi mumkin.

Turi tekshirish uchun o'xshash yondashuvlar:

  • typeof: asosiy ma'lumot turini ko'rsatadigan satrni qaytaradi (string, number, boolean, object, function, undefined, symbol, bigint). Maxsus sinfga tegishli ekanligini tekshirish uchun mos emas.
  • Object.prototype.toString.call(): ob'ektning turini aniqroq ko'rsatadigan satrni qaytaradi ("[object Array]", "[object Date]", va hokazo).

Umuman olganda, instanceof ob'ektning ma'lum bir sinfga yoki uning ajdodlariga tegishli ekanligini tekshirish uchun foydalidir.