关键词搜索

全站搜索×
密码登录在这里
×
注册会员

已有账号? 请点击

使用其他方式登录

JS中typeof和instanceof用法和区别

发布2022-05-12浏览458次

详情内容

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. 需要补充的以后想到了再补吧,写了这么多,除了一丝丝疲劳就是成就感啦


点击QQ咨询
开通会员
返回顶部
×
  • 微信支付
  • 支付宝付款
微信扫码支付
微信扫码支付
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载