上一篇文章,我講到了使用typeof和constructor兩種方法來進行物件類型的判斷。其中,typeof可以說是js設計上的一個缺陷,因為幾乎不可能從它那裡得到想要的結果,它唯一的使用情境就是判斷一個變數是否已經定義,如typeof para==='undefined',因此,一般情況下不要用它來進行物件類型的檢查。
而constructor是一個很有用處的屬性,它能夠正確的得到我們期望的結果,但是,它返回的是一個對象。
今天,介紹另外一個方法來實現物件類型的判斷。這是javascript標準文檔中給出的方法,就是使用Object.property.toString.call。首先來看一下這個方法返回的結果:
Object.prototype.toString.call([]);//[Object Array]Object.prototype.toString.call({});//[Object Object]Object.prototype.toString.call(2);//[Object Number]Object.prototype.toString.call("2");//[Object String]Object.prototype.toString.call(function (){});//[Object Function] 可見,它確實能正確地返回我們所期望的結果,但是在我們寫代碼的時候,如果拿這個傳回值去做判斷的話,會很麻煩(因為它太長了,並且我們只需要後面一部分)。如果才能得到該結果中我們所需要的那部分呢?用下面的函數可以實現:
function is(type, obj) {
var clas = Object.prototype.toString.call(obj).slice(8, -1);
return obj !== undefined && obj !== null && clas === type;
}
其中,type是我們所期望的類型,而obj是我們所要判斷類型的對象。。
is("Array",[1,2]);//true