Eva*_*oll 5 javascript cross-platform cross-browser ecmascript-5 console.log
我正在努力接管一个代码库,该代码库进行测试以确保console.warn存在,如下所示:
if (window.console) {
console.warn("shhaabang");
}
Run Code Online (Sandbox Code Playgroud)
但是,我的问题是它仅在具有窗口对象的浏览器中有效。这似乎也有效。
if (console && typeof console.warn == 'function') {
console.warn("shhaabang");
}
Run Code Online (Sandbox Code Playgroud)
这种方法有什么缺点吗?有没有更好的方法不假设 的存在window?我应该先查看窗口或全局是否存在并检查两者吗?
澄清至少应该很明显的是,我正在没有该window对象的东西中测试它。但是,明确地说,我在 node.js 以及浏览器中运行它
你不应该这样做
if(console && typeof console.warn == "function"){ ... }
Run Code Online (Sandbox Code Playgroud)
因为如果未定义控制台,这会引发错误
您可以使用this
例如:
if(this.console){
console.warn("shhaabang");
}
Run Code Online (Sandbox Code Playgroud)
编辑:哦,抱歉,我刚刚注意到两件事:1)这只有在this没有更改的情况下才有效...谢谢@Evan Carroll 2)这在 中不起作用strict mode,因为在strict mode,this中undefined
所以这是另一种方法:
var c;
try {
c = console;
} catch(e){
// console is not defined
}
if(c) {
// console is defined
}else{
// this will not throw because you declared `c` earlier
}
Run Code Online (Sandbox Code Playgroud)