Sobes.tech
Junior

JavaScriptте instanceof оператору эмне текшерет?

sobes.tech AI

AIден жооп

JavaScriptтеги instanceof оператору объекттин белгилүү бир класс же конструктордун инстанциясы экенин текшерет.

Иштөө принциби:

  1. instanceof оператору конструктордун prototype объектин объекттин прототиптик чынжырында бар-жогун текшерет.
  2. Эгер prototype чынжырда болсо, натыйжа true болот.
  3. Эгер жок болсо, натыйжа false болот.

Мисалдар:

// Класс түзүү
class Animal {
  // Конструктор
  constructor(name) {
    this.name = name;
  }
}

// Класс инстанциясын түзүү
let dog = new Animal("Buddy");

// dog объектин Animal классынын инстанциясы экенин текшерүү
console.log(dog instanceof Animal); // true

// dog объектин Object классынын инстанциясы экенин текшерүү (жыланча)
console.log(dog instanceof Object); // true

// dog объектин Array классынын инстанциясы эмес
console.log(dog instanceof Array); // false

// Встроенный типтер менен текшерүү
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 (примитивтер үчүн)
// `new` аркылуу түзүлгөн объекттер үчүн
let numObj = new Number(123);
console.log(numObj instanceof Number); // true

Өзгөчөлүктөрү:

  • instanceof прототип чынжыр аркылуу иштейт, ошондуктан жыйынтык ата-энелер конструкторлору үчүн да true болушу мүмкүн.
  • Примитивтер (string, number, boolean, null, undefined, symbol, bigint) үчүн, instanceof адатта false кайтарат, эгер алар тиешелүү обертка объекттери аркылуу түзүлбөсө (new String(), new Number() ж.б.).
  • JavaScript иштетүү контексттеринде (мисалы, браузер терезелери же iframe) так болбой калышы мүмкүн, анткени ар бир контекст өзүнүн конструкторлоруна ээ.

Типти текшерүүнүн башка ыкмалары:

  • typeof: негизги маалымат түрүн көрсөтөт (string, number, boolean, object, function, undefined, symbol, bigint). Конкреттүү классга таандыктыкты текшерүүгө ылайыктуу эмес.
  • Object.prototype.toString.call(): такыраак типтин саптамасын кайтарат ("[object Array]", "[object Date]" жана башка).

Жалпысынан, instanceof объекттин конкреттүү класска же анын мураскорлугуна таандык экенин текшерүүдө пайдалуу.