0

console.logJavaScript にデバッグ ステートメントを残すことがあります。誤って本番環境に移行しないようにするため (一部の古いブラウザーはこれらで動作しなくなります)、最初の coffeescript ファイルでこれを実行してみました。

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

しかし、これにより、console.log をサポートするブラウザー (Webkit) であっても、開発で console.log を使用するすべての機能が失われるようです。

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 に答える