一、能力检测
检测一个方式是否存在,最好不用简单得if(Object.propertyInQusetion){}检测,因为propertyInQusetion可能不是你想要的方法,可能是个属性,也会返回true,我们用typeof Object.propertyInQusetion=="function"检测更靠谱一些
另外,IE早期版本中的宿主对象是通过COM而非JScript实现的,比如document.createElement()函数是一个COM对象,typeof返回“object”,所以也要将这个情况考虑其中
关于typeof的行为不标准,IE中还可以举出例子来。ActiveX对象(只有IE支持)与其他对象的行为差异很。不使用typeof测试某个属性会导致错误
var xhr=new ActiveXObject("Microsoft.XMLHttp");
if(xhr.open){ //这里会发生错误
//执行操作
}
所以使用typeof更靠谱一些,我们使用下面这个函数
function isHostMethod(object,property){
var t=typeof object[property];
return t=="function" || (!!(t=='object' && object[property])) || t=='ubknown'; //!!相当于Boolean()
}
isHostMethod(xhr,"open")
二、怪癖检测
未完待续........