您的位置:首页 > Web前端 > JavaScript

JS类型识别

2016-01-11 16:13 615 查看
一、JS中的类型分为以下几种:

1、原始(值)类型:

1)Undefined、Null:单分出来的原因是它们没有构造函数。

2) Number、String、Boolean。

2、对象(引用)类型:

Object、Array、Date、RegExp、自定义对象……

二、原始类型与对象类型的区别:栈内存、堆内存

原始类型使用栈内存,变量名对应的存储空间内是值本身;

对象类型使用堆内存,变量名对应的存储空间内是指向实际值的指针。

(扩展:浅拷贝和深拷贝)

三、类型识别:

1、typeof:操作符、很常用、可识别原始类型,不可识别对象类型

-typeof "Jerry"; //"string"(首字母小写~)

-typeof undefined; //"undefined"

-typeof {}; //"object"

-特殊的:typeof
null; //"object"

-特殊的:typeof
(function(){});//"function"

-对于[]、new Date()、/\s/i、function Person(){},均显示”object“。

2、instanceof:可判别内置对象类型,不可判别原始类型

-[] instanceof Array;//true

-/\d/ instanceof RegExp;//true

-12 instanceof Number://false

-"Tommy" instanceof String;//false

但是!instanceof可以判别自定义对象类型及父子类型!

function Point(x,y){this.x=x; this.y=y;}

function Cirlcle(x,y,r){Point.call(this,x,y); this.radius=r;}

Circle.prototype=new Point();

Circle.prototype.constructor=Cirlcle;

//创建一个Cirlcle对象:

var c =new Circle (1,1,2);

//可以看到c既属于Circle也属于Point

c instanceof Circle; //true

c instanceof Point; //true

3、Object.prototype.toString.call:使用原型链判断对象的属性,可判断标准类型和内置对象类型,不可判断自定义类型

-Object.prototype.toString.call(obj).slice(8,-1);

可识别:Number、String、Boolean、Undefined、Null、Object、Array、Date、RegExp、Function

例:Object.prototype.toString.call(function(x){return x;}).slice(8,-1); //"Function"

不可识别:自定义对象:

例:function Point(x,y){this.x=x; this.y=y;}

Object.prototype.toString.call(new Point(1,2)).slice(8,-1); //"object"

4、利用对象的constructor(构造函数)

1)除了Undefined和Null以外,所有对象都有自己的构造函数;

2)用编译器选中一个函数,在_proto_属性下的constructor属性中可以看到对象的构造函数;

3)例:

//可以判别标准类型:

"Jerry".constructor===String; //true;

//可以判别内置对象类型:

new Date().constructor===Date; //true;

//可以判别自定义对象类型:

function Person(name){ this.name=name;}

new Person("Jerry").constructor===Person; //true;

//不能判别自定义对象类型:

Null.constructor; //Uncaught Reference Error:Null is not defined(...) VM9364:2

一个简单的判别函数:

function getConstructorName(obj){

return obj&&obj.constructor&&obj.constructor.toString().match(/function\s([^(]*)/)[1];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: