目前最准确的判定方法(不包括自定义类型)
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