目前最準確的判定方法(不包括自訂類型)
1.var is = 函數(obj, 類型) {
2.
var _toString = Object.prototype.toString,未定義;
3.
return (type === "Null" && obj === null) ||
4.
(型別 ===「未定義」&& obj === 未定義)||
5.
_toString.call(obj).slice(8,-1) === 型別;
6.};
實現方式如下:
01.//****************範例一,備份與函數
02.
var forEach = 函數(數組,fn,綁定){
03.
if(is(數組,"數組") && is(Array.forEach,"函數")){
04.
array.forEach(fn,bind);
05.
}別的{
06.
for(var i=0,n=array.length;i<n;i++){
07.
i 在陣列中 && fn.call(bind,array[i],i,array)
08.
}
09.
}
10.
}
11.//****************例二,判定為空
12.var a = 空
13.警報(是(a,「空」))
14.//****************範例二,判定未定義
15. 變種b
16.alert(is(b,"未定義"))
另一種變種,直接傳回表示類型的字串
1.var getType = 函數(obj) {
2.
var _toString = Object.prototype.toString,未定義;
3.
返回 obj === null? 「無效的」:
4.
obj === 未定義? 「不明確的」:
5.
_toString.call(obj).slice(8,-1);
6.};
方法:
01.var arr = [1,2,3,4]
02.
Alert(getType(arr));//數組
03.
var nil = 空
04.
Alert(getType(nil))//空
05.
var 和 ;
06.
Alert(getType(und))//未定義
07.
var spans = document.getElementsByTagName("span");
08.
Alert(getType(spans)) //HTMLCollection
09.
alert(getType(spans[0].childNodes))//NodeList