有时我们会在我们的javascript中留下console.log
调试语句。只是因此他们不会意外地将其投入生产(一些旧的浏览器将死于这些),我们尝试在我们的第一个coffeescript文件中执行此操作:
if !console?
console = {log: ->}
但这似乎会破坏开发中使用console.log的所有能力,即使在支持它的浏览器(webkit)中也是如此。
console?
返回false,因此if块不会运行,但它似乎仍会覆盖console.log
的功能。
有什么想法吗?谢谢!
答案 0 :(得分:3)
问题在于:
if !console?
console = {log: ->}
成为这个JavaScript:
var console;
if (typeof console === "undefined" || console === null) {
console = {
log: function() {}
};
}
结果是您有一个本地console
变量,它隐藏了您正在寻找的window.console
。
解决方案就是说出你的意思:
if 'console' !of window
window.console = { log: -> }
请注意console
始终本地化为window
,因此您不会意外地创建任何阴影。
有多种方式可以说if 'console' !of window
具有相同的效果,请使用最适合您的方式。
答案 1 :(得分:0)
我的方法是定义要使用的DEBUG
(或print
)函数,而不是console.log
。默认的生产定义是
DEBUG = () ->
在任何测试代码之前(例如最后像Python if __name__...
阻止):
if not module.parent? and (!process.argv[2]? or process.argv[2]!='nodebug')
DEBUG = (arg...) ->
arg.unshift('==> ')
console.log arg...
或只是
DEBUG = console.log