代码替换,看教学视频用的代码1,自己认为代码2就可以解决。

代码1:

var xhr = null;
if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
} else {
    xhr = new ActiveXObject('Microsoft.XMLHTTP');
}

能使用代码2:

var xhr = new XMLHttpRequest()||new ActiveXObject('Microsoft.XMLHTTP')

替换吗?我感觉意思一样,不知可否?代码1写的比较多是否我有没考虑的情况?

阅读 2.6k
4 个回答

不能。如果window.XMLHttpRequest不存在的话,你代码里面new XMLHttpRequest()直接就报错了。

如同innlym的答案,你的代码如果在IE浏览器中运行的话,会报错。我把这句代码改成var xhr = new ActiveXObject('Microsoft.XMLHTTP')|| new XMLHttpRequest()在chrome中运行,也会报错。因为在chrome中,没有ActiveXObject这个对象。所以是报错,而不是输出false。
图片描述

new name()这个是直接拿来用了 如果没有name这个方法肯定报错
就相当于 var str = a || "abc" 这里a根本就没定义就会报错
但是,我试了一下用ie11模拟ie低版本,连ie5都有XMLHttpRequest这个东西,所以你这样写是不会报错的,永远走的是new XMLHttpRequest

var xhr = new XMLHttpRequest()||new ActiveXObject('Microsoft.XMLHTTP');

这种写法明显会出错,XMLHttpRequest
就像是如下结果

{
    const B = function(){};
    var test = new A() || new B();
}

如果A没有被定义会返回A is not defined
此时运行 new A() 无疑是错上加错。

如果你真的想使用简写,可以这么写:

var xhr = window.XMLHttpRequest && new XMLHttpRequest() || window.ActiveXObject && new ActiveXObject('Microsoft.XMLHTTP');
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏