//@see https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser/9851769
// Internet Explorer 6-11
var isIE = /*@cc_on!@*/false || !!document.documentMode;

问题描述: 如上js代码是用来判断当前环境是否为ie浏览器,在ie11中没有什么问题,但是ie10及以下在控制台报了个错,着实困扰,最后步步排查,居然是那句//@see 的注释造成的,解决方案为删除这个注释,但是始终不得其理,最后发现了问题可能在ie浏览器执行环境中,有一个叫"Conditional compilation"和"Conditional comments"的东西,目前"Conditional compilation"在ie11中已经取消,“Conditional comments”在ie10中已经不可用了。

问题可能原因:

var isIE = /*@cc_on!@*/false;

这个isIE的判断利用了ie的“Conditional compilation”, 在ie中,/@这个起始标签和@/这个结束标签之内的内容是可以执行的,所以在ie环境中;

var isIE = /*@cc_on!@*/false;
//实际为
var isIE = !false; 

而在非ie浏览器中,这就是注释,不会执行。

var isIE = /*@cc_on!@*/false;
//实际为
var isIE = false; 

所以这句注释 //@see...可能造成了这个问题,解决方案要么就是删除这个注释,或者就是在@之前加入空格,变为 // @see...。

参考链接: https://itgotmethinking.com/2008/11/25/dealing-with-internet-explorer-in-your-javascript-code/ https://docs.microsoft.com/en-us/scripting/javascript/reference/at-cc-on-statement-javascript