概括
...
if (window.XMLHttpRequest) { ... }
仅在支持标准 XHR 时才评估in 。否则,ActiveX 用于支持 IE5-6。
要检查是否支持XMLHttpRequest
API规范,请测试全局XMLHttpRequest
对象是否存在。由于window
是全局对象,因此只需检查window.XMLHttpRequest
属性的存在。{1}
如下图所示,!
是逻辑 NOT运算符,用于在 中显示结果if (window.XMLHttpRequest)
。
if (window.XMLHttpRequest)
// Supported:
!!window.XMLHttpRequest === !![object XMLHttpRequest] === !false === true
// Not supported, so the property does not exist, and is undefined
!!window.XMLHttpRequest === !!undefined === !true === false
但是,这还不是故事的结局。XHR 的概念起源于微软,它是第一个在他们的浏览器中实现它的人,通过ActiveXObject
:Internet Explorer 5.0。后来,在 7.0 版中,Microsoft 增加了对标准化 XHR API 的支持。
没有人关心 IE5 了。然而,仍然有相当数量的 IE6 用户(大约 1%)。因此,通过以下方式支持 IE5-6 也无妨:
... } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
{1}:要考虑的其他方法:
if (typeof window.XMLHttpRequest !== 'undefined')
- 这也行。
if (XMLHttpRequest)
-不应该使用。当变量不存在(=未声明)时,ReferenceError:
抛出 XMLHttpRequest is undefined`