目前最精确的判定方法(不包括自定义类型)
1.var es = función (obj, tipo) {
2.
var _toString = Object.prototype.toString,indefinido;
3.
retorno (tipo === "nulo" && obj === nulo) ||
4.
(tipo === "Indefinido" && obj === indefinido) ||
5.
_toString.call(obj).slice(8,-1) === tipo;
6.};
用法如下:
01.//***************示例一,判定数组与函数
02.
var para cada = función (matriz, fn, vincular) {
03.
if(is(matriz,"Matriz") && es(Array.forEach,"Función")){
04.
matriz.forEach(fn,bind);
05.
}demás{
06.
for(var i=0,n=array.length;i<n;i++){
07.
i en matriz && fn.call(bind,matriz[i],i,matriz)
08.
}
09.
}
10.
}
11.//***************示例二,判定null
12.var a = nulo
13.alerta(es(a,"Nulo"))
14.//***************示例二,判定undefinido
15.var b
16.alerta(es(b,"Indefinido"))
另一个变种,直接返回表示类型的字符串
1.var getType = función (obj) {
2.
var _toString = Object.prototype.toString,indefinido;
3.
devolver objeto === nulo? "Nulo":
4.
obj === indefinido? "Indefinido":
5.
_toString.call(obj).slice(8,-1);
6.};
用法:
01.var arreglo = [1,2,3,4]
02.
alert(getType(arr));//Matriz
03.
var nulo = nulo
04.
alerta(getType(nil))//Nulo
05.
var und ;
06.
alerta(getType(und))//Indefinido
07.
var abarca = document.getElementsByTagName ("intervalo");
08.
alerta(getType(spans)) //HTMLCollection
09.
alert(getType(spans[0].childNodes))//NodeList