JavaScript instanceof理解及與typeof對比

經常有人會在JavaScript裏寫如下的方法:
function checkType() {
var s1 = 123;
var s2 = "OK";
if (s1 instanceof Number) {
alert("s1 is a number.");
}
if (s2 instanceof String) {
alert("s2 is a String.");
}


但是結果卻沒有alert出來信息。

問題在哪裏呢?
首先我們要理解,JS裏,var本身是一個泛型,它並不是Number,也不是String,更不是其他的類
其次要從instanceof方法來理解:
第一
instanceof 表示對象是否是特定類的一個實例。
注意特定類的實例,也就是說instanceof反饋的是對象的構造的信息。
語法爲:result = object instanceof class
例如:
function Test()
{
}
var test = new Test();
alert( test instanceof Test);
第二:
String 類型的聲明。
使用 var str = new String("String");聲明定義的是一個String類型的對象。str指向該對象的一個引用
使用var str1 = "String";聲明定義將str指向字符串“String”,
str指向一個實例,str1指向一個字符串。
以上聲明定義的規則,同java類似。
訪問str時,javascript引擎會“自動拆裝包”得到str的對象實例所表示的值“String”。所謂“自動拆裝包”即運行期時,基礎數據類型 轉換成基礎類型構造的對象實例以及將基礎類型構造的對象實例轉換成基礎數據類型。如“new Number”、new Boolean("true")、new String等。
因此s2只有自己的基本類型而沒有所謂的實例構造類型

即,我們定義了var s1 = 123, 它的類型並不是Number,而是var。
只有我們把123實例化爲Number的時候,它的類型在instanceof裏纔是Number。
其他的自定義類一樣。

下面補充一點是另外一個方法typeof
引用自:http://hi.baidu.com/microidc/blog/item/647a792dca4603331f308906.html
javascript中instanceof和typeof都能用來判斷一個變量是否爲空或是什麼類型的變量。
typeof用以獲取一個變量的類型,typeof一般只能返回如下幾個結果:
number,boolean,string,function,object,undefined。
我們可以使用typeof來獲取一個變量是否存在,如
if(typeof a!="undefined"){}
而不要去使用if(a),因爲如果a不存在(未聲明)則會出錯,
對於Array,Null等特殊對象使用typeof一律返回object,這正是typeof的侷限性。
如果我們希望獲取一個對象是否是數組,或判斷某個變量是否是某個對象的實例則要選擇使用instanceof。
instanceof用於判斷一個變量是否某個對象的實例,如
var a=new Array();
alert(a instanceof Array);
會返回true,
同時
alert(a instanceof Object)
也會返回true;
這是因爲Array是object的子類。
再如:
function test(){};
var a=new test();
alert(a instanceof test)
會返回true。
談到instanceof我們要多插入一個問題,就是function的arguments,
我們大家也許都認爲arguments是一個Array,
但如果使用instaceof去測試會發現arguments不是一個Array對象,儘管看起來很像。
另外:
測試
var a=new Array();
if (a instanceof Object) {
alert('Y');
} else {
 alert('N');
}
得到'Y'

if (window instanceof Object) {
alert('Y');
} else {
alert('N');
}
得到'N'
所以,這裏的instanceof測試的object是指js語法中的object,不是指dom模型對象。
使用typeof會有些區別
alert(typeof(window) 會得到 object
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章