javascript之typeof、instanceof操作符使用探讨_基础知识
写javascirpt代码时,typeof和instanceof这两个操作符时不时就会用到,堪称必用。但是!使用它们总是不能直接的得到想要的结果,非常纠结,普遍的说法认为“这两个操作符或许是javascript中最大的设计缺陷,因为几乎不可能从他们那里得到想要的结果”
typeof
说明:typeof返回一个表达式的数据类型的字符串,返回结果为js基本的数据类型,包括number,boolean,string,object,undefined,function。
从说明来看,貌似没什么问题。
下面的代码写了一个数值变量,typeof后的结果是"number"。
var a = 1;
console.log(typeof(a)); //=>number
如果用Number类型的构造函数new一个变量的话,typeof后的结果是"object"。
var a = new Number(1);
console.log(typeof(a)); //=>object
上面的这两个输出结果看似没啥问题,这一点从书上看来是理所当然的事情,因为javascript就是这么设计的。
但是!问题就在于既然调用了typeof就应该准确返回一个变量的类型,不管是直接用值创建的还是用类型的构造函数创建的,否则!我还用你做啥!
那么对于:
var a = 1;
var b = new Number(1);
a和b变量的类型准确的说来都应该是Number才是想要的结果。
而准确的类型信息保存在变量的内部属性 [[Class]] 的值中,通过使用定义在 Object.prototype 上的方法 toString来获取。
获取类型信息:
var a = 1;
var b = new Number(1);
console.log(Object.prototype.toString.call(a));
console.log(Object.prototype.toString.call(b));
输出:
[object Number]
[object Number]
是不是已经很直接了,我们稍微处理一下,得到直接结果:
var a = 1;
var b = new Number(1);
console.log(Object.prototype.toString.call(a).slice(8,-1));
console.log(Object.prototype.toString.call(b).slice(8,-1));
输出:
Number
Number
这就是想要的结果。
为了更好的使用,我们封装一个方法,用来判断某个变量是否是某种类型:
function is(obj,type) {
var clas = Object.prototype.toString.call(obj).slice(8, -1);
return obj !== undefined && obj !== null && clas === type;
}
定义一些变量做过测试,先来看看它们的typeof输出:
var a1=1;
var a2=Number(1);
var b1="hello";
var b2=new String("hello");
var c1=[1,2,3];
var c2=new Array(1,2,3);
console.log("a1's typeof:"+typeof(a1));
console.log("a2's typeof:"+typeof(a2));
console.log("b1's typeof:"+typeof(b1));
console.log("b2's typeof:"+typeof(b2));
console.log("c1's typeof:"+typeof(c1));
console.log("c2's typeof:"+typeof(c2));
输出:
a1's typeof:number
a2's typeof:object
b1's typeof:string
b2's typeof:object
c1's typeof:object
c2's typeof:object
我们再用新作的函数是一下:
console.log("a1 is Number:"+is(a1,"Number"));
console.log("a2 is Number:"+is(a2,"Number"));
console.log("b1 is String:"+is(b1,"String"));
console.log("b2 is String:"+is(b2,"String"));
console.log("c1 is Array:"+is(c1,"Array"));
console.log("c2 is Array:"+is(c2,"Array"));
输出:
a1 is Number:true
a2 is Number:true
b1 is String:true
b2 is String:true
c1 is Array:true
c2 is Array:true
注:typeof也不是无用,实际用处是用来检测一个变量是否已经定义或者是否已经赋值。
instanceof
说明:判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例。
instanceof 操作符用来比较两个内置类型的变量时一样力不从心,同样会对结果不满意。
console.log("abc" instanceof String); // false
console.log("abc" instanceof Object); // false
console.log(new String("abc") instanceof String); // true
console.log(new String("abc") instanceof Object); // true
只有在比较自定义的对象时才准确反映关系。
function Person() {}
function Man() {}
Man.prototype = new Person();
console.log(new Man() instanceof Man); // true
console.log(new Man() instanceof Person); // true

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

La fonction de instanceof est de déterminer si un objet est une instance d'une certaine classe ou s'il implémente une interface. instanceof est un opérateur utilisé pour vérifier si un objet est d'un type spécifié. Scénarios d'utilisation de l'opérateur instanceof : 1. Vérification de type : peut être utilisée pour déterminer le type spécifique d'un objet, afin d'effectuer différentes logiques selon différents types 2. Jugement d'interface : peut être utilisé pour déterminer si un objet implémente une interface ; , afin de déterminer si un objet implémente une interface. La définition de l'interface appelle la méthode correspondante 3. Transformation vers le bas, etc.

L'utilisation de la plupart des commandes Linux utilisant le symbole « ! » peut varier selon les shells. Bien que les exemples que je fournis soient généralement utilisés dans les shells bash, certains autres shells Linux peuvent avoir des implémentations différentes ou ne pas prendre en charge certaines utilisations du symbole « ! » Plongeons dans les utilisations surprenantes et mystérieuses du symbole « ! » dans les commandes Linux. 1. Utilisez le numéro de commande pour exécuter une commande à partir de l'historique. Ce que vous ne savez peut-être pas, c'est que vous pouvez exécuter une commande à partir de l'historique des commandes (commandes déjà exécutées). Tout d’abord, recherchez le numéro de la commande en exécutant la commande « history ». linuxmi@linuxmi :~/www.linuxmi.

L'opérateur égal modulo (%) est un opérateur très couramment utilisé en PHP et permet de calculer le reste de la division de deux nombres. Dans cet article, nous examinerons plus en détail l'utilisation de l'opérateur modulaire égal et fournirons des exemples de code spécifiques pour aider les lecteurs à mieux comprendre. Tout d'abord, regardons un exemple simple. Supposons que nous devions calculer le reste de la division d'un nombre par un autre : $a=10;$b=3;$remainder=$a%$b;echo"10 divisé par 3 Le reste. est: &

En Java, instanceof est un opérateur binaire utilisé pour vérifier si un objet est une instance d'une classe ou une instance d'une sous-classe d'une classe. Sa syntaxe est "object instanceof class", où object est un objet. Citation, class est une classe. nom ou nom de l'interface.

SQL dans l'utilisation de l'opérateur : 1. Correspondance sur une seule colonne, vous pouvez utiliser l'opérateur IN pour faire correspondre plusieurs valeurs dans une colonne 2. Correspondance sur plusieurs colonnes, l'opérateur IN peut également être utilisé pour faire correspondre les valeurs dans plusieurs colonnes ; 3. Sous-requête. L'opérateur IN peut également être utilisé avec une sous-requête, qui est une instruction de requête imbriquée dans la requête principale.

Dans les versions précédentes de PHP, si nous ne définissions pas de variable, son utilisation directe entraînerait une erreur de variable non définie. Cependant, en PHP7, nous pouvons utiliser quelques nouvelles fonctionnalités pour éviter ce problème. Ces nouveautés incluent deux nouveaux opérateurs : ?-> et ??. Ils peuvent résoudre respectivement deux types de problèmes différents.

Concept 1. Cet opérateur permet d'opérer sur des objets et de vérifier si l'objet est d'un type spécifique (type ou type d'interface). Format 2. Si l'objet pointé par la variable sur le côté gauche de la calculatrice est un objet de la classe ou de l'interface sur le côté droit de l'opérateur, le résultat est vrai. (Objectreferencevariable)instanceof(class/interfacetype) instance packagecom.verify_instanceof;publicclassTestInstanceOf{publicstaticvoidmain(String[]args){//Les quatre lignes de code suivantes sont utilisées pour prouver : instanceof

Cet opérateur n'est utilisé que pour les variables de référence d'objet. Cet opérateur vérifie si un objet appartient à un type spécifique (type classe ou type interface). L'opérateur instanceof est écrit comme -(Objectreferencevariable)instanceof(class/interfacetype) Si l'objet référencé par la variable sur le côté gauche de l'opérateur réussit la vérification IS-A du type classe/interface sur le côté droit, le résultat sera être fidèle. Voici un exemple - Exemple de démonstration en direct publicclassTest{ publicstaticvoidmain(Stringargs[]){&nbs
