2011-07-20 17 views
2

快速的問題。我剛剛在JS文件中遇到以下內容:if(0){// code}的用途?

if (0) { 
    // code 
} 

這條if語句的用途是什麼?代碼將執行哪些情況?它目前不運行if子句中的代碼。

+5

快速註釋或禁用調試代碼的方法? –

+0

只是爲了防止有人執行'#define 0 1'? –

+0

@Marc B:你知道這在JavaScript中是不可能的嗎? :) – pimvdb

回答

9

它看起來像一個發展過程的人造物。用這種代碼包裝代碼,可以快速,單字符的方式來有效地註釋掉一段代碼。切換比典型的多行註釋更快。

6

有人使用它來有效地評論出大量的代碼。

它們可能意味着在發佈給公衆之前完全刪除它,但忘記了。

2

它不會運行。這可能是有人試圖對代碼進行註釋,並且中間有太多的/* */(或者可能有其他原因,爲什麼原作者不想使用/* */?)。無論原因如何,if(0){}表示if(false){}。大括號之間的代碼永遠不會運行。

1

這是可能的代碼

1

臨時禁用部分這可能只是切換啓用/禁用代碼一個簡單的方法,但你可以看到的是,是由服務器端語言渲染JavaScript代碼。因此,舉例來說,如果你是在PHP寫的,你想客戶端的JavaScript運行,如果你的PHP變量$ doThis了非空,你可以寫

if (<? echo $doThis; ?>) { 
    // do stuff... 
} 

不是有很多情況下這會發生,但我知道Blogger使用技術顯示帖子下方的評論數量。

+0

'null',實際上是'false',在PHP中作爲空字符串進行字符串化。所以你會得到'if(){...}',這在語法上是無效的。 $ doThis必須是數字0或字符串表示。 – Stewart

+0

是否有任何真正的理由這樣做,而不是使用PHP來有條件地寫出整個代碼塊? – Stewart

+0

@斯圖爾特沒有必要,但這樣你可以只回聲一個數字,而不是有一個完整的if語句 – eds

3

實際上,在Javascript中,有些代碼甚至在這樣的塊中運行。例如,在if(0)塊被定義的變量將與值undefined來定義:

if (0) 
{ 
    var f = 1; 
} 
f; //undefined 
g; //ReferenceError 

另一個很好的例子是在塊聲明函數的情況下。這是在ECMAScript中未定義的行爲,所以結果可跨瀏覽器不同而不同:

if (0) 
{ 
    function f() {} 
} 
typeof f; //"undefined" in Firefox, "function" in other browsers 

IIRC一些布告欄軟件生成01在服務器端;請參閱@ eds的帖子。

+1

嗯有趣...很好的知道 –

+0

在Chrome(WebKit)中'typeof'確實返回'function'。 – pimvdb

+2

我會解釋。首先是因爲javascript的提升特性:聲明將被移到最近範圍的頂部('if'不是範圍)。所以代碼真的是:var f; if(0){f = 1} f; G; – spacevillain