Maison > interface Web > js tutoriel > le corps du texte

Vérification de type en JavaScript : la différence entre les opérateurs typeof et instanceof

青灯夜游
Libérer: 2020-12-17 09:35:13
avant
2278 Les gens l'ont consulté

En JavaScript les opérateurs typeof et instanceof peuvent effectuer une vérification de type, alors quelles sont les différences entre eux ? Cet article vous présentera la différence entre les opérateurs typeof et instanceof. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Vérification de type en JavaScript : la différence entre les opérateurs typeof et instanceof

Recommandations associées : "tutoriel vidéo javascript"

Les smarties doivent savoir que JS est un langage faiblement typé et que les variables sont là il n'y a aucune restriction sur le type.

Par exemple, si nous créons une variable en utilisant le type chaîne, nous pouvons ensuite attribuer un numéro à la même variable :

let message = 'Hello'; // 分配一个字符串

message = 14; // 分配一个数字
Copier après la connexion

Cette dynamique nous donne de la flexibilité et simplifie l'énoncé des variables.

Par contre, nous ne pouvons jamais être sûrs qu'une variable contient une valeur d'un certain type. Par exemple, la fonction suivante greet(who) nécessite un paramètre chaîne, cependant, nous pouvons appeler la fonction avec n'importe quel type de paramètre :

function greet(who) {
  return `Hello, ${who}!`
}

greet('World'); // => 'Hello, World!'
// You can use any type as argument
greet(true);    // => 'Hello, true!'
greet([1]);     // => 'Hello, 1!'
Copier après la connexion

Parfois, nous devons vérifier le type d'une variable en JS, comment faire il?

Utilisez l'opérateur typeof avec instanceof pour vérifier le type d'instance.

1.<code><span style="font-size: 18px;">typeof</span>type deOpérateur

String en JS, les types de base incluent Number, Boolean, Symbol et undefined etc. De plus, il existe des fonctions, des objets et des valeurs spéciales null et

.

typeofexpression est l'opérateur utilisé pour déterminer le type de

 :

const typeAsString = typeof expression;
Copier après la connexion
expressionexpression est évalué à une valeur du type que nous recherchons. myVariable peut être une variable myObject.myProp, un accesseur de propriété myFunction(), un appel de fonction 14 ou un nombre .

typeof expressionexpression, selon la valeur de 'string', le résultat peut être : 'number', 'boolean', 'symbol', 'undefined', 'object', 'function',

.

typeofJetons un coup d'œil à chaque type d'opérateur

 :

A) Chaîne :

const message = 'hello!';
typeof message; // => 'string'
Copier après la connexion
B) Nombre :

const number = 5;
typeof number; // => 'number'

typeof NaN;    // => 'number'
Copier après la connexion
C ) Booléen :

const ok = true;
typeof ok; // => 'boolean'
Copier après la connexion
D) Symbole :

const symbol = Symbol('key');
typeof symbol; // => 'symbol'
Copier après la connexion
E) non défini :

const nothing = undefined;
typeof nothing; // => 'undefined'
Copier après la connexion
F) Objets :

const object = { name: 'Batman' };
typeof object; // => 'object'

const array = [1, 4, 5];
typeof array; // => 'object'

const regExp = /Hi/;
typeof regExp; // => 'object'
Copier après la connexion
G) Fonctions :

function greet(who) {
  return `Hello, ${who}!`
}

typeof greet; // => 'function'
Copier après la connexion
1.1 type de null

typeofComme nous pouvons le voir ci-dessus, utiliser 'object' pour juger l'objet donne

.

typeof nullCependant, 'object' sera également compté comme

 !

const missingObject = null;
typeof missingObject; // => 'object'
Copier après la connexion
typeof null'object' car était un bug dans l'implémentation initiale de JS.

typeofPar conséquent, lorsque vous utilisez null pour détecter des objets, vous devez également vérifier

 :

function isObject(object) {
  return typeof object === 'object' && object !== null;
}

isObject({ name: 'Batman' }); // => true
isObject(15);                 // => false
isObject(null);               // => false
Copier après la connexion
1.2 type de variables et variables non définies

typeof expression Bien que expression soit généralement déterminé par le type de typeof, vous pouvez également utiliser

pour déterminer si une variable est définie.

// notDefinedVar is not defined
notDefinedVar; // throws ReferenceError
Copier après la connexion
typeoftypeof a une propriété intéressante qui lorsque ReferenceError évalue le type d'une variable non définie, il ne génère pas l'erreur  :

// notDefinedVar is not defined
typeof notDefinedVar; // => 'undefined'
Copier après la connexion
notDefinedVarLa variable typeof  notDefinedVar n'est pas actuellement défini dans le champ d’application. Cependant, 'undefined' ne génère pas d'erreur de référence et est évalué à .

typeof Nous pouvons utiliser typeof myVar === 'undefined' pour détecter si une variable n'est pas définie, si true est myVar, alors

n'est pas défini.

2. instanceof Operator

La manière habituelle d'utiliser une fonction JS est de l'appeler en ajoutant une paire de crochets après son nom :

function greet(who) {
  return `Hello, ${who}!`;
}

greet('World'); // => 'Hello, World!'
Copier après la connexion
greet('World') est un appel de fonction régulier.

newLes fonctions JS peuvent faire bien plus : elles peuvent même construire des objets ! Pour qu'une fonction construise un objet, utilisez simplement le mot-clé

avant l'appel de fonction régulier :

function Greeter(who) {
  this.message = `Hello, ${who}!`;
}

const worldGreeter = new Greeter('World');
worldGreeter.message; // => 'Hello, World!'
Copier après la connexion
new Greeter('World')worldGreeter est l'appel du constructeur qui crée l'instance .

instanceofComment vérifier si JS a créé une instance spécifique en utilisant un constructeur spécifique ? Utilisez l'opérateur

 :

const bool = object instanceof Constructor;
Copier après la connexion
objectConstructor est une expression qui évalue l'objet, et instanceof est une classe ou une fonction qui construit l'objet, et est évalué à une valeur booléenne. Les instances

worldGreeterGreeter sont créées à l'aide du constructeur 此worldGreeter instanceof Greeter, donc true est évalué à

.

classÀ partir d'ES6, vous pouvez utiliser Pet pour définir des objets. Par exemple, définissez une classe myPet puis créez-en une instance

 :
class Pet {
  constructor(name) {
    this.name = name;
  }
}

const myPet = new Pet('Lily');
Copier après la connexion

new Pet('Lily')是创建实例myPet的构造调用。

由于myPet是使用Pet类构造的-const myPet = new Pet('Lily'), 所以 myPet instanceof Pet 的结果为 true

myPet instanceof Pet; // => true
Copier après la connexion

但是,普通对象不是Pet的实例:

const plainPet = { name: 'Zoe' };
plainPet instanceof Pet; // => false
Copier après la connexion

我们发现instanceof对于确定内置的特殊实例(如正则表达式、数组)很有用:

function isRegExp(value) {
  return value instanceof RegExp;
}
isRegExp(/Hello/); // => true
isRegExp('Hello'); // => false

function isArray(value) {
  return value instanceof Array;
}
isArray([1, 2, 3]); // => true
isArray({ prop: 'Val' }); // => false
Copier après la connexion

2.1 instanceof 和父类

现在,Cat 扩展了父类Pet

class Cat extends Pet {
  constructor(name, color) {
    super(name);
    this.color = color;
  }
}

const myCat = new Cat('Callie', 'red');
Copier après la connexion

不出所料,myCatCat类的实例:

myCat instanceof Pet; // => true
Copier après la connexion
Copier après la connexion

但同时,myCat也是基类Pet的一个实例:

myCat instanceof Pet; // => true
Copier après la connexion
Copier après la connexion

3. 总结

JS 是一种弱类型的语言,这意味着对变量的类型没有限制。

typeof expression可以用来查看 expression 的类型,结果是可能是其中的一个:'string''number''boolean', 'symbol''undefined''object''function'

typeof null的值为'object',因此使用typeof检测对象的正确方法是typeof object ==='object'&& object!== null

instanceof运算符让我们确定实例的构造函数。 如果objectConstructor的实例,则object instanceof Constructortrue

原文地址:https://dmitripavlutin.com/javascript-typeof-instanceof/

作者:Dmitri Pavlutin

译文地址:https://segmentfault.com/a/1190000038312457

更多编程相关知识,请访问:编程课程!!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!