Maison interface Web js tutoriel 判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解_基础知识

判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解_基础知识

May 16, 2016 pm 05:17 PM
object typeof

1、typeof(param) 返回param的类型(string)

这种方法是JS中的定义的全局方法,也是编译者们最常用的方法,优点就是使用简单、好记,缺点是不能很好的判断object、null、array、regexp和自定义对象。

示例代码:

复制代码 代码如下:

var str='str';
var arr=['1','2'];
var num=1;
var bool=true;
var obj={name:'test'};
var nullObj=null;
var undefinedObj=undefined;
var reg=/reg/;

function fn(){
    alert('this is a function');
}

function User(name){
    this.name=name;
}
var user=new User('user');

console.log(typeof(str));
console.log(typeof(arr));
console.log(typeof(num));
console.log(typeof(bool));
console.log(typeof(obj));
console.log(typeof(nullObj));
console.log(typeof(undefinedObj));
console.log(typeof(reg));
console.log(typeof(fn));
console.log(typeof(user));


结果为:
复制代码 代码如下:

string
object
number
boolean
object
object
undefined
object
function
object

2、Object.prototype.toString().call(param) 返回param的类型(string,格式是[object class])

这个方法能支持绝大多数类型的判断,jquery封装的类型判断就用的这个方法。可能有些人看起来有点迷茫,我来给大家分解一下。

1)call(param)函数

a.fun().call(b)的意思在js中是指,让对象b来代替a,然后执行a的fun函数,写个例子:

复制代码 代码如下:

function Class1()
{
    this.name = "class1";

    this.showNam = function()
    {
        alert(this.name);
    }
}

function Class2()
{
    this.name = "class2";
}

var c1 = new Class1();
var c2 = new Class2();

c1.showNam.call(c2);


运行结果,输出的为class2,而不是class1,这就相当于是方法继承。
所以,Object.prototype.toString().call(param)的意思其实就是,param.prototype.toString(),那么我们为什么不直接写param.prototype.toString(),而是用call()绕一下呢,下面请看2来了解。

2)Object.prototype.toString()

Object是个什么东东呢?,Script56.chm(就是M$官方教程)上说:Obect提供所有 JScript对象通用的功能,其实Object就是所有js对象的祖先,是一个概念,js中的所有对象就是Object的实例,然后不同的对象重写自己独立的方法。而prototype,大家就没必要追究太深了,它就是返回一个原型的引用,然可以可以动态的给原型添加方法和属性
一个小例子

复制代码 代码如下:

function class(){
  this.name = "class";
  this.showName = function(){
    alert(this.name);
  }
}
var obj = new class();
obj.showName();
class.prototype.showNameContact = function(){
  alert("prototype test"+this.name);
}
obj.showNameContact();

那么就会分别输出 class和prototype test class,本来构造函数class() 里是没有定义showNameContact函数的,而通过prototype我们就可以给对象原型动态添加函数,new的示例中自然就会有了。所以Object.prototype.toString()的意思就是执行Object这个祖先中的toString方法。

那么toString()是干嘛的呢?很多js手册中对toString()函数是这样定义的:
toString() 方法可把一个逻辑值转换为字符串,并返回结果,语法为:booleanObject.toString()。刚才我说了,js中的对象都是继承的Object,这些对象都自定义的有函数或者重构了Object的部分函数,而且它们都对toString()函数进行了重写。所以我们不能想1中直接写param.prototype.toString()这样就执行的是param自己重写后的toString()函数了。

好了,到关键的时刻了,toString()到底是干嘛的呢,有什么作用呢?

在ES3中,Object.prototype.toString方法的规范如下:

Object.prototype.toString()

在toString方法被调用时,会执行下面的操作步骤:

1. 获取this对象的[[Class]]属性的值.

2. 计算出三个字符串"[object ", 第一步的操作结果Result(1), 以及 "]"连接后的新字符串.

3. 返回第二步的操作结果Result(2).

在ES3中,规范文档并没有总结出[[class]]内部属性一共有几种,不过我们可以自己统计一下,原生对象的[[class]]内部属性的值一共有10种.分别是:"Array", "Boolean", "Date", "Error", "Function", "Math", "Number", "Object","RegExp", "String".所以Object.prototype.toString()的输出结果就是这种格式的字符串[object Array],[object Boolean]。

在ES5.1中,除了规范写的更详细一些以外,Object.prototype.toString方法和[[class]]内部属性的定义上也有一些变化,Object.prototype.toString方法的规范如下:

Object.prototype.toString ( )
在toString方法被调用时,会执行下面的操作步骤:

1 如果this的值为undefined,则返回"[object Undefined]".
2 如果this的值为null,则返回"[object Null]".
3 让O成为调用ToObject(this)的结果.
4 让class成为O的内部属性[[Class]]的值.
5 返回三个字符串"[object ", class, 以及 "]"连接后的新字符串.

可以看出,比ES3多了1,2,3步.第1,2步属于新规则,比较特殊,因为"Undefined"和"Null"并不属于[[class]]属性的值。经统计,可返回的类型有"Arguments", "Array", "Boolean", "Date", "Error", "Function", "JSON", "Math", "Number", "Object", "RegExp", "String"比ES3多了2种分别是arguments对象的[[class]]成了"Arguments",而不是以前的"Object",还有就是多个了全局对象JSON,它的[[class]]值为"JSON"。

最后的最后提醒大家,Object.prototype.toString().call(param)返回的[object class]中class首字母是大写,像JSON这种甚至都是大写,所以,大家判断的时候可以都转换成小写,以防出错,Object.prototype.toString().call(param).toLowerCase()即可。

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)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

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)

Quelles sont les méthodes de conversion d'un objet Java en octet et d'un octet en objet ? Quelles sont les méthodes de conversion d'un objet Java en octet et d'un octet en objet ? Apr 20, 2023 am 11:37 AM

Objet en octet et octet en objet Aujourd'hui, nous allons comprendre comment convertir un objet en octet et comment convertir un octet en objet. Tout d'abord, définissez un élève de classe : packagecom.byteToObject;importjava.io.Seriallessly;publicclassstudentimplementsSerializing{privateintsid;privateStringname;publicintgetSid(){returnsid;}publicvoidsetSid(in

Comment utiliser les méthodes dans la classe Java Object Comment utiliser les méthodes dans la classe Java Object Apr 18, 2023 pm 06:13 PM

1. Introduction à la classe Object Object est une classe fournie par Java par défaut. À l'exception de la classe Object, toutes les classes Java ont des relations d'héritage. Par défaut, il héritera de la classe parent Object. Autrement dit, les objets de toutes les classes peuvent être reçus en utilisant la référence Object. Exemple : utilisez Object pour recevoir des objets de toutes les classes classPerson{}classStudent{}publicclassTest{publicstaticvoidmain(String[]args){function(newPerson());function(newStudent());}public

Java utilise la fonction getClass() de la classe Object pour obtenir la classe d'exécution de l'objet Java utilise la fonction getClass() de la classe Object pour obtenir la classe d'exécution de l'objet Jul 24, 2023 am 11:37 AM

Java utilise la fonction getClass() de la classe Object pour obtenir la classe d'exécution de l'objet. En Java, chaque objet possède une classe qui définit les propriétés et les méthodes de l'objet. Nous pouvons utiliser la fonction getClass() pour obtenir la classe d'exécution d'un objet. La fonction getClass() est une fonction membre de la classe Object, tous les objets Java peuvent donc appeler cette fonction. Cet article explique comment utiliser la fonction getClass() et donne quelques exemples de code. utiliser obtenir

Quelle est la relation entre les types de données de base et l'objet en Java Quelle est la relation entre les types de données de base et l'objet en Java May 01, 2023 pm 04:04 PM

La relation entre les types de données de base et Object. Je sais que tout le monde a entendu dire que Object est la classe de base de tous les types, mais cette phrase n'est en fait pas correcte, car les types de données de base en Java n'ont rien à voir avec Object. Par exemple, lorsque vous appelez la méthode swap, vous ne pouvez pas transmettre directement le type int à la méthode swap(Objectobj), car Object n'a en fait rien à voir avec le type de données de base. À ce stade, a constate que nos types ne correspondent pas. il l'enveloppe donc automatiquement. Il est devenu un type Integer. À ce stade, il peut être contacté avec Object et la méthode swap peut être appelée avec succès Object, une classe wrapper de types de données de base.

Avis PHP : tentative d'obtention de la propriété d'une solution non-objet Avis PHP : tentative d'obtention de la propriété d'une solution non-objet Jun 24, 2023 pm 09:34 PM

PHPNotice: Tryingtogetpropertyofnon-object Solution Lorsque vous développez en PHP, vous pouvez rencontrer ce message d'erreur: "Remarque: Tryingtogetpropertyofnon-object." Ce message d'erreur est généralement dû au fait que vous utilisez un objet non initialisé, ou parce que votre objet a perdu sa référence. dans un certain morceau de code et ne peut pas accéder correctement aux propriétés.

Comment définir la structure objet de Redis Comment définir la structure objet de Redis May 28, 2023 pm 05:20 PM

Introduction à la structure de données à deux niveaux de Redis L'une des raisons des hautes performances de Redis est que chacune de ses structures de données est spécialement conçue et prise en charge par une ou plusieurs structures de données sur lesquelles on s'appuie pour améliorer la lecture. performances de récupération et d’écriture. Si vous souhaitez comprendre la structure des données de Redis, vous pouvez en discuter à partir de deux niveaux différents : Le premier niveau est du point de vue de l'utilisateur. Ce niveau est également l'interface d'appel que Redis expose à l'extérieur, telle que : chaîne, liste, hachage, ensemble, ensemble trié. Le deuxième niveau est du point de vue de l'implémentation interne, qui appartient à l'implémentation de niveau inférieur, telle que : dict, sds, ziplist, quicklist, skiplis

Avis PHP : Solution pour essayer d'obtenir la propriété d'un non-objet Avis PHP : Solution pour essayer d'obtenir la propriété d'un non-objet Jun 22, 2023 pm 02:43 PM

Solution à PHPNotice : Essayer d'obtenir la propriété d'un non-objet Lors du processus d'écriture de code en PHP, nous pouvons rencontrer le message d'erreur « Essayer d'obtenir la propriété d'un non-objet ». Ce message d'erreur se produit généralement parce que nous essayons d'accéder à une propriété d'objet qui n'existe pas, provoquant une erreur dans le code. Ce message d'erreur apparaît généralement dans les situations suivantes : L'objet n'existe pas

Type d'utilisation en JavaScript Type d'utilisation en JavaScript Nov 23, 2023 am 10:39 AM

En JavaScript, typeof est un opérateur utilisé pour déterminer le type de données d'une variable donnée. Peut être utilisé pour déterminer si une variable est une chaîne, un nombre, un booléen, une fonction, un objet ou un type de données non défini.

See all articles