JS中typeof和instanceof的用法小解
阿新 • • 發佈:2019-01-03
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. 需要補充的以後想到了再補吧,寫了這麼多,除了一絲絲疲勞就是成就感啦