mat*_*teo 23 javascript console internet-explorer undefined internet-explorer-8
我正在使用console.log()我编写的一些JavaScript,并且错误:console is not defined在Internet Explorer中抛出(在其他浏览器中工作正常).
我已将其替换为:
if (console) console.log("...");
如果console是undefined,我希望条件评估为false.因此,该声明console.log不会被执行,也不应该抛出错误.
相反,console is not defined at character 4抛出了错误:
这是IE漏洞吗?或者"if"条件是否真的非法?这似乎很荒谬,因为如果if (console)是非法的,那么也if (console==undefined)应该是非法的.
你应该如何检查undefined变量?
Edg*_*ado 31
其他答案给了你根本原因.但是,有一个比if任何调用之前使用更好的解决方案console.*
在包含使用控制台的任何脚本之前添加此(一次):
//Ensures there will be no 'console is undefined' errors
window.console = window.console || (function(){
var c = {}; c.log = c.warn = c.debug = c.info = c.error = c.time = c.dir = c.profile = c.clear = c.exception = c.trace = c.assert = function(s){};
return c;
})();
Run Code Online (Sandbox Code Playgroud)
这将创建一个'伪'控制台,只有它不存在,因此'控制台未定义'错误将消失,你不必每次都询问控制台是否存在.有了这个,你只需在console.log任何地方调用或任何控制台方法,没有问题.
希望这可以帮助.干杯
pim*_*vdb 25
如果console 它本身根本不存在,则会抛出错误,因为您正在访问未定义的变量.就像if(abc) {}抛出错误一样.
既然console存在window,并且window 确实存在,这应该有效:
if(window.console) ...
Run Code Online (Sandbox Code Playgroud)
基本上,访问不存在的属性是免费的,并且不会抛出错误(它只是评估undefined,失败的if条件).但是,访问未声明的变量是非法的.
在Internet Explorer中,除非您的开发人员工具在窗口加载时打开,否则实际上并未定义控制台对象.
要解决您的问题,请将所有控制台打印件包装在if语句中:
if (typeof window.console !== 'undefined') {
...
}
Run Code Online (Sandbox Code Playgroud)
您还需要在打开开发人员工具后刷新每个页面以查看控制台打印.<3 IE