Sobes.tech
Junior

Ի՞նչ է ստուգում instanceof օպերատորը JavaScript-ում։

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 (պարզական արժեքների դեպքում `instanceof`-ը հատուկ է)
// Ստեղծված նոր օբյեկտով
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 օգտակար է ստուգելու համար, արդյոք օբյեկտը պատկանում է կոնկրետ դասի կամ նրա ժառանգորդին։