鍍金池/ 問(wèn)答/HTML/ 代碼替換,看教學(xué)視頻用的代碼1,自己認(rèn)為代碼2就可以解決。

代碼替換,看教學(xué)視頻用的代碼1,自己認(rèn)為代碼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')

替換嗎?我感覺(jué)意思一樣,不知可否?代碼1寫的比較多是否我有沒(méi)考慮的情況?

回答
編輯回答
久愛(ài)她

new name()這個(gè)是直接拿來(lái)用了 如果沒(méi)有name這個(gè)方法肯定報(bào)錯(cuò)
就相當(dāng)于 var str = a || "abc" 這里a根本就沒(méi)定義就會(huì)報(bào)錯(cuò)
但是,我試了一下用ie11模擬ie低版本,連ie5都有XMLHttpRequest這個(gè)東西,所以你這樣寫是不會(huì)報(bào)錯(cuò)的,永遠(yuǎn)走的是new XMLHttpRequest

2017年5月30日 06:57
編輯回答
不討囍

不能。如果window.XMLHttpRequest不存在的話,你代碼里面new XMLHttpRequest()直接就報(bào)錯(cuò)了。

2017年12月2日 04:48
編輯回答
吢涼

如同innlym的答案,你的代碼如果在IE瀏覽器中運(yùn)行的話,會(huì)報(bào)錯(cuò)。我把這句代碼改成var xhr = new ActiveXObject('Microsoft.XMLHTTP')|| new XMLHttpRequest()在chrome中運(yùn)行,也會(huì)報(bào)錯(cuò)。因?yàn)樵赾hrome中,沒(méi)有ActiveXObject這個(gè)對(duì)象。所以是報(bào)錯(cuò),而不是輸出false。
圖片描述

2017年5月8日 06:00
編輯回答
遺莣
var xhr = new XMLHttpRequest()||new ActiveXObject('Microsoft.XMLHTTP');

這種寫法明顯會(huì)出錯(cuò),XMLHttpRequest
就像是如下結(jié)果

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

如果A沒(méi)有被定義會(huì)返回A is not defined
此時(shí)運(yùn)行 new A() 無(wú)疑是錯(cuò)上加錯(cuò)。

如果你真的想使用簡(jiǎn)寫,可以這么寫:

var xhr = window.XMLHttpRequest && new XMLHttpRequest() || window.ActiveXObject && new ActiveXObject('Microsoft.XMLHTTP');
2018年2月10日 12:30