Maison interface Web js tutoriel javascript之typeof、instanceof操作符使用探讨_基础知识

javascript之typeof、instanceof操作符使用探讨_基础知识

May 16, 2016 pm 05:33 PM
instanceof typeof 操作符

写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
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Que fait instanceof ? Que fait instanceof ? Nov 14, 2023 pm 03:50 PM

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.

Huit utilisations mystérieuses de l'opérateur '!' dans les commandes Linux Huit utilisations mystérieuses de l'opérateur '!' dans les commandes Linux Jun 27, 2023 pm 12:51 PM

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.

En savoir plus sur l'utilisation de l'opérateur modulo égal en PHP En savoir plus sur l'utilisation de l'opérateur modulo égal en PHP Mar 19, 2024 pm 12:54 PM

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: &

Que signifie instanceof en Java Que signifie instanceof en Java Nov 13, 2023 pm 01:52 PM

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 SQL dans l'utilisation de l'opérateur Aug 04, 2023 pm 03:58 PM

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.

Deux nouveaux opérateurs ajoutés à php7 : '?->' et '??' Deux nouveaux opérateurs ajoutés à php7 : '?->' et '??' Mar 21, 2023 pm 03:49 PM

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.

Comment utiliser l'opérateur instanceof en Java Comment utiliser l'opérateur instanceof en Java May 19, 2023 am 08:16 AM

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

opérateur instanceof en Java opérateur instanceof en Java Sep 01, 2023 pm 08:01 PM

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

See all articles