javascript中,测试数据类型用到typeof 和 instanceof. 我们知道我们可以使用typeof确定我们的变量属于哪一种原始类型,但是当我们用于对象和null时,typeof始终返回object。数组、对象都是Object的引用类型实例,如果typeof获取这些数据的类型,那么始终返回Object。如果我们要确定给定的变量属于什么类型的对象,我们可以使用instanceof()
1. typeof一般测试基本类型(Undefined、Null、Boolean、Number、String),对引用类型一律返回object(Function引用类型返回Function)
测试基本类型:
var a="oo"; var b=true; var c=""; var d=null; var e=10; alert(typeof(o));//undefined alert(typeof(a)); //string alert(typeof(b)); //boolean alert(typeof(c));//string alert(d==null); //true alert(typeof(e)); //number
测试引用型:
var obj1=new Object(); var obj2=new Array(); var obj3=new Date(); var obj4=new Function(); var obj5=new Boolean(); var obj6=new Number(); var obj7=new String(); alert("obj1 "+typeof(obj1)); //object alert("obj2 "+typeof(obj2)); //object alert("obj3 "+typeof(obj3));//object alert("obj4 "+typeof(obj4));//function alert("obj5 "+typeof(obj5));//object alert("obj6 "+typeof(obj6));//object alert("obj7 "+typeof(obj7));//object alert(obj4 instanceof Function);//true alert(obj4 instanceof Object);//true
2. instanceof测试引用类型(Object、Array、Date、RegExp、Function、基本包装类型(Boolean、Number、String))
2.1 基本包装类型
基本类型值拥有方法操作 和 基本包装类型的出现,前者促进了后者,后者实现了前者。
var s1="some clothes"; var s2=s1.substring(2); alert(s2);//me clothes
在后台自动实现以下过程:
<1>自动创建String类型的一个实例 (中间出现的一个人物,任务是 暗中替s1调用方法)
<2>在实例上调用方法 ,返回值给s2
<3>销毁实例(完成使命就销毁了)
普通的引用类型和基本包装类型的主要区别就是 对象的生存期。自动创建的普通包装类型的实例存在一会就被销毁了,而手动new的一个平常的引用类型的实例,只要执行流还在当前作用域,它就一直保存在内存中。
2.2 测试
例子1 instanceof 可判断对象是不是另一个对象的实例,进一步判断继承关系
function Fa(){} function Son(){} Son.prototype=new Fa(); var obj=new Son(); alert("obj是否是Son的实例? "+(obj instanceof Son));//true alert("obj是否是Fa的实例? "+(obj instanceof Fa));//true
例子2 寄生构造函数模式下,测试o是不是people的实例
function people(name,age,job){ o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); }; return o; } var person=new people("zhang","19","student"); person.sayName(); alert(o instanceof people);//返回的对象o不是people的实例,但是是Object的实例
例子3 字符串传入Object构造函数,自动创建String实例
var obj=new Object("one day"); alert("obj instanceof String");//true
后台自动为"one day"创建一个String实例,赋值给obj后销毁
3. 需要补充的以后想到了再补吧,写了这么多,除了一丝丝疲劳就是成就感啦