概括
...if (window.XMLHttpRequest) { ... }仅在支持标准 XHR 时才评估in 。否则,ActiveX 用于支持 IE5-6。
要检查是否支持XMLHttpRequestAPI规范,请测试全局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`