5

コメントは、解析する前に文字通りソースから取り除かれているだけですか、それとも改行としてカウントされ、特定のコンテキストで連続性を損なう可能性がありますか?

'foo'.replace(/f/, 'b') //f->b
     .replace(/o/, 'a') //o->a
     .replace(/o/, 'r') /*o->r*/ ;

'foo'.replace(/x/, /*matches "x"*/ 'y');

var foo = ( true !== false ) ? // bikeshed
          'bar' : /*if they're equal, which they won't be, we'll want 'baz'*/ 'baz';

ご存知のように、空白は「安全」で「重要ではない」などと言われていますが、例外があることは誰もが知っています。コメントは本当に安全ですか?

4

2 に答える 2

5

それらは解析中に無視されます。解析前にそれらが削除された場合、パーサーは入力を 2 回スキャンする必要があります。

ただし、行末の LineTerminator は、単一行コメントの一部とは見なされません。字句文法によって個別に認識され、構文文法の入力要素のストリームの一部になります。この点は非常に重要です。これは、単一行コメントの有無がセミコロンの自動挿入のプロセスに影響しないことを意味するためです。

コメントの ES5 仕様

ソース コードは、コメントが存在しないかのようにトークン化されます。

于 2012-09-30T05:55:52.167 に答える
3

はい、コメントは安全です。

(そうは言っても、インライン JavaScript が何であるかを認識せず、すべての改行を削除する壊れたサーバー側の HTML ミニファイアをいくつか見てきました。コメントで始まる//コメントは、スクリプト全体をコメントアウトします。)

于 2012-09-30T05:55:47.233 に答える