为什么jQuery在try / catch中包装XHR对象?

时间:2014-03-20 16:09:05

标签: javascript jquery ajax

如果我不用jQuery编写我自己的跨浏览器AJAX函数(我这样做),我会这样做:

var getXHR = function() {
  if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    return new ActiveXObject('Microsoft.XMLHTTP');
  }
}

但是在挖掘jQuery的source code时,我注意到了这一点:

function createStandardXHR() {
  try {
    return new window.XMLHttpRequest();
  } catch( e ) {}
}
function createActiveXHR() {
  try {
    return new window.ActiveXObject( "Microsoft.XMLHTTP" );
  }
}

然后:

createStandardXHR() || createActiveXHR();

为什么jQuery开发人员只是直接在try/catch块内部调用对象构造函数,而不是使用特征检测。我想try/catch比简单的if检查慢。有什么好处?

1 个答案:

答案 0 :(得分:0)

你的方法很好。
在阅读完代码之后,我认为jQuery的开发人员使用这个技巧在一个语句中创建Request对象并测试!this.isLocal && /^(get|post|head|put|delete|options)$/i.test( this.type ) &&而没有错误。