2012-09-30 24 views
5

在解析之前,註釋是否從您的源代碼中刪除?或者它們可以作爲換行符並破壞特定上下文中的連續性?評論在所有主要環境中100%安全嗎?

'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'; 

你知道,因爲他們說的空白就是「安全」和「不重要」或什麼,但我們都知道有例外情形。意見實際上安全嗎?

+0

我猜是這樣,除非在你使用的編譯器/解析器中出現解析錯誤.. – techfoobar

+0

史詩般的問題,這意味着它之前已被問過。有嗎? –

+3

無論什麼SO降價語法熒光筆正在做什麼將會發生 – qwertymk

回答

5

他們被忽略期間解析,如果它們在解析之前被剝離,解析器將需要掃描輸入兩次。

但是,行結束處的LineTerminator不被視爲 是單行註釋的一部分;它被 單獨識別爲詞彙語法,併成爲語法語法的輸入元素 的一部分。這點很重要,因爲它 意味着單行的存在或不存在評論不 影響自動分號插入

ES5 Specification for comments的過程。

源代碼被標記爲好像註釋不存在一樣。

+1

是'abc/*一個註釋*/def'一個標識符('abcdef')還是兩個('abc'後跟'def')? –

+0

你能否引用一個資料來源? – wwaawaw

+0

偉大的問題,@j_random_hacker – wwaawaw

3

是的,評論是安全的。 (這就是說,我已經看到了一些不知道內聯JavaScript的服務器端HTML縮小器,並刪除了所有換行符,以//開頭的註釋將註釋掉整個腳本。)

+0

我會在10分鐘內接受這個或任何如果你可以引用任何形式的來源。 – wwaawaw

+1

@adlwalrus,我的來源是15年來,我還沒有看到瀏覽器搞砸JavaScript評論。如果你不想相信,那很好。無論如何,Alex的回答是更好的,他的解釋是。 – Brad

+1

@adlwalrus,如果你想要的規範:http://ecma-international.org/ecma-262/5.1/#sec-7.4 – Brad