0

有时我们会console.log在 javascript 中留下调试语句。只是为了不让它们意外地投入生产(一些旧浏览器会死在这些产品上),我们尝试在我们的第一个咖啡脚本文件中这样做:

if !console?
  console = {log: ->}

但这似乎扼杀了在开发中使用 console.log 的所有能力,即使在支持它的浏览器(webkit)中也是如此。

console?返回 false,因此 if 块不会运行,但它似乎仍然覆盖了console.log.

有任何想法吗?谢谢!

4

2 回答 2

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会产生相同的效果,请使用对您来说最清楚的一种。

于 2013-08-22T00:54:31.527 回答
0

我的方法是定义一个DEBUG(或print)函数来代替console.log. 默认的生产定义是

DEBUG = () ->

在任何测试代码之前(例如,在 Pythonif __name__...块的末尾):

if not module.parent? and (!process.argv[2]? or process.argv[2]!='nodebug')
    DEBUG = (arg...) ->
      arg.unshift('==> ')
      console.log arg...

或者干脆

DEBUG = console.log
于 2013-08-22T04:51:48.317 回答