1. 程式人生 > >JS中typeof和instanceof的用法小解

JS中typeof和instanceof的用法小解

javascript中,測試資料型別用到typeof 和 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. 需要補充的以後想到了再補吧,寫了這麼多,除了一絲絲疲勞就是成就感啦