Rumah hujung hadapan web tutorial js 判断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()即可。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah kaedah menukar Objek java kepada bait dan bait kepada Objek? Apakah kaedah menukar Objek java kepada bait dan bait kepada Objek? Apr 20, 2023 am 11:37 AM

Objek kepada bait dan bait kepada Objek Hari ini kita akan menyedari cara menukar daripada Objek kepada bait dan cara menukar daripada bait kepada Objek. Mula-mula, tentukan pelajar kelas: packagecom.byteToObject;importjava.io.Serializable;publicclassstudentimplementsSerializable{privateintsid;privateStringname;publicintgetSid(){returnsid;}publicvoidsetSid(in

Bagaimana untuk menggunakan kaedah dalam kelas Objek Java Bagaimana untuk menggunakan kaedah dalam kelas Objek Java Apr 18, 2023 pm 06:13 PM

1. Pengenalan kepada kelas Objek Objek ialah kelas yang disediakan oleh Java secara lalai. Kecuali untuk kelas Objek, semua kelas di Jawa mempunyai hubungan warisan. Secara lalai, ia akan mewarisi kelas induk Objek. Iaitu, objek semua kelas boleh diterima menggunakan rujukan Object. Contoh: Gunakan Object untuk menerima objek semua kelas classPerson{}classStudent{}publicclassTest{publicstaticvoidmain(String[]args){function(newPerson());function(newStudent());}public

Java menggunakan fungsi getClass() kelas Objek untuk mendapatkan kelas masa jalan objek Java menggunakan fungsi getClass() kelas Objek untuk mendapatkan kelas masa jalan objek Jul 24, 2023 am 11:37 AM

Java menggunakan fungsi getClass() kelas Objek untuk mendapatkan kelas runtime objek Dalam Java, setiap objek mempunyai kelas, yang mentakrifkan sifat dan kaedah objek. Kita boleh menggunakan fungsi getClass() untuk mendapatkan kelas runtime sesuatu objek. Fungsi getClass() ialah fungsi ahli kelas Objek, jadi semua objek Java boleh memanggil fungsi ini. Artikel ini akan memperkenalkan cara menggunakan fungsi getClass() dan memberikan beberapa contoh kod. gunakan dapatkan

Apakah hubungan antara jenis data asas dan Objek dalam java Apakah hubungan antara jenis data asas dan Objek dalam java May 01, 2023 pm 04:04 PM

Hubungan antara jenis data asas dan Objek Saya tahu semua orang pernah mendengar bahawa Object ialah kelas asas untuk semua jenis, tetapi ayat ini sebenarnya tidak betul, kerana jenis data asas dalam Java tidak ada kaitan dengan Object. Berikut adalah beberapa contoh Sebagai contoh, apabila memanggil kaedah swap, anda tidak boleh meneruskan jenis int kepada kaedah swap(Objectobj), kerana Object sebenarnya tiada kaitan dengan jenis data asas Pada masa ini, a mendapati bahawa jenis kami tidak sepadan, jadi ia secara automatik membungkusnya. Ia telah menjadi jenis Integer Pada masa ini, ia boleh dihubungi dengan Object dan kaedah swap boleh dipanggil dengan jayanya, kelas pembalut jenis data asas

Notis PHP: Cuba untuk mendapatkan harta penyelesaian bukan objek Notis PHP: Cuba untuk mendapatkan harta penyelesaian bukan objek Jun 24, 2023 pm 09:34 PM

PHPNotice: Tryingtogetpropertyofnon-object solution Apabila anda sedang membangunkan dalam PHP, anda mungkin menghadapi mesej ralat ini: "Notis: Tryingtogetpropertyofnon-object." dalam sekeping kod tertentu dan tidak boleh mengakses sifat dengan betul.

Bagaimana untuk menentukan struktur Objek redis Bagaimana untuk menentukan struktur Objek redis May 28, 2023 pm 05:20 PM

Pengenalan kepada struktur data dua lapisan Redis Salah satu sebab prestasi tinggi redis ialah setiap struktur datanya direka khas dan disokong oleh satu atau lebih struktur data Ia bergantung pada struktur data yang fleksibel ini untuk meningkatkan bacaan prestasi Ambil dan tulis. Jika anda ingin memahami struktur data redis, anda boleh membincangkannya dari dua tahap berbeza: tahap pertama adalah dari perspektif pengguna Tahap ini juga merupakan antara muka panggilan yang Redis dedahkan ke luar, seperti: rentetan, senarai, hash ,set, sortedset. Tahap kedua adalah dari perspektif pelaksanaan dalaman, yang tergolong dalam pelaksanaan peringkat bawah, seperti: dict, sds, ziplist, quicklist, skiplis

Penyelesaian kepada Notis PHP: Mencuba mendapatkan harta bukan objek Penyelesaian kepada Notis PHP: Mencuba mendapatkan harta bukan objek Jun 22, 2023 pm 02:43 PM

Penyelesaian kepada PHPNotis: Tryingtogetpropertyofnon-object Dalam proses menulis kod dalam PHP, kita mungkin menghadapi mesej ralat "Tryingtogetpropertyofnon-object". Mesej ralat ini biasanya berlaku kerana kami cuba mengakses sifat objek yang tidak wujud, menyebabkan ralat dalam kod. Mesej ralat ini biasanya muncul dalam situasi berikut: Objek tidak wujud

Bagaimana untuk menggunakan kelas Objek dan kelas Sistem di Java? Bagaimana untuk menggunakan kelas Objek dan kelas Sistem di Java? Apr 23, 2023 pm 11:28 PM

Objek ialah kelas asas bagi semua kelas Java, bahagian atas keseluruhan struktur warisan kelas, dan kelas paling abstrak. Semua orang menggunakan toString(), equals(), hashCode(), wait(), notify(), getClass() dan kaedah lain setiap hari Mungkin mereka tidak menyedari bahawa ia adalah kaedah Object, dan mereka tidak melihat apa kaedah lain yang Object ada Dan fikirkan mengapa kaedah ini harus diletakkan dalam Object. 1. Pengenalan kepada kelas JavaObject - kelas super semua kelas Object ialah kelas khas dalam perpustakaan kelas Java dan juga merupakan kelas induk bagi semua kelas. Dalam erti kata lain, Java membenarkan apa-apa jenis objek untuk diberikan kepada jenis Objek

See all articles