2009-08-22 137 views
0

良好的星期六上午到網上最有幫助的在線社區! =)這是否正確的JavaScript語法?

我有幾百行JavaScript我想重新格式化,以方便我閱讀。我想,在我浪費了一天的一半之前,我會先在這裏問我的問題。

我是JavaScript新手,想知道下面的語法是否正確?

我原來的代碼是這樣的:

function formfocus() { 
    if(document.getElementById('inputida')) { 
     document.getElementById('inputida').focus(); 
     document.getElementById('inputida').value = ''; 
    } 
    else if(document.getElementById('inputidb')) { 
     document.getElementById('inputidb').focus(); 
     document.getElementById('inputidb').value = ''; 
    } 
} 

function popitup(url, name, width, height) { 
    newwindow = window.open(url, name, 'width=' + width + ',height=' + height + ',scrollbars=yes'); 

    if(window.focus) { 
     newwindow.focus(); 
    } 
    return false; 
} 

......我想改變的代碼到這個(注意間距):

function formfocus() 
{ 
    if (document.getElementById('inputida')) 
    { 
     document.getElementById('inputida').focus(); 
     document.getElementById('inputida').value = ''; 
    } 
    else if (document.getElementById('inputidb')) 
    { 
     document.getElementById('inputidb').focus(); 
     document.getElementById('inputidb').value = ''; 
    } 
} 

function popitup(url, name, width, height) 
{ 
    newwindow = window.open(url, name, 'width=' + width + ', height=' + height + ', scrollbars=yes'); 

    if (window.focus) 
    { 
     newwindow.focus(); 
    } 
    return false; 
} 

的區別是:

  1. 後面的空格'if''else if'陳述
  2. 間距圍繞parentheses
  3. 換行開curly braces
+0

你知道「其他」部分不僅將永遠不會被執行,但它也和其他人一樣,對嗎? – Javier 2009-08-22 13:10:36

+0

我剛剛修復了我的代碼。 'inputid'已被更正。 – Jeff 2009-08-22 13:13:22

+1

我對答案的冷靜感到驚訝,但也許是因爲它是JavaScript而不是C++。格式化/代碼風格問題對於程序員來說可能是一個宗教問題,他們中的一些人寧可嘲笑他們的眼睛,而不願意放在新的界限上。不是我。 ;) – Xiaofu 2009-08-22 14:38:11

回答

2

是的,你的新的語法是有效的,等於把老了。

除了非常隱晦的情況之外,JavaScript代碼中的換行符和空格被忽略,所以您可以根據自己的喜好進行佈局。

但是舊的語法是如何編寫慣用的JavaScript - 一位經驗豐富的JavaScript程序員看着你的新語法會覺得很奇怪。

+0

「地道......」要去google那個。 Lol – Jeff 2009-08-22 12:22:16

+0

@Jeff:8-)將其解讀爲「由經驗豐富的JavaScript編程人員編寫的JavaScript」。這就像英語 - 母語爲英語的人有時用對第二語言學習英語的人聽起來很奇怪的方式表達事物。 – RichieHindle 2009-08-22 12:25:46

+0

Gotchya,非常有意義。 =) – Jeff 2009-08-22 12:30:50

1

它是有效的。

這增加了可讀性。

但是,在您的發佈版本中,最好是縮小您的js文件以減少帶寬使用量。

Jsmin是一個javascript minifer。

JSMin是一個過濾器,其去除JavaScript文件 註釋和不必要的空白 。它通常 減少一半的文件大小,導致 更快的下載。它還鼓勵 更具表現力的編程風格 ,因爲它消除了下載 清潔成本,識字 自我文檔。

2

儘量避免多次調用的document.getElementById:

var objInputId = document.getElementById('inputid'); 
objInputId.focus(); 
objInputId.value = "val"; 
+0

以* big *的方式! – 2009-08-22 12:26:38

+0

你能告訴我你的意思嗎?上面顯示的示例是否替換了我原始代碼中的某些內容?如果是這樣,哪一行?非常感謝! – Jeff 2009-08-22 12:29:59

+0

@Jeff:是的,該代碼可以有效地替代''formfocus''函數的整個主體。查看我的答案(現在下面)以獲取完整的上下文。 – 2009-08-22 12:58:31

0

是,JavaScript並不是基於行的,並且不需要最間距。

你甚至可以這樣寫在riddiculously不可讀的方式代碼:

function formfocus(){if(document.getElementById(
'inputid')){document.getElementById('inputid').focus 
();document.getElementById('inputid').value='';}else 
if(document.getElementById('inputid')){document. 
getElementById('inputid').focus();document.getElementById 
('inputid').value='';}}function popitup(url,name,width, 
height){newwindow=window.open(url,name,'width='+width+', 
height='+height+',scrollbars=yes');if(window.focus 
){newwindow.focus();}return false;} 

或者這樣:

function 
formfocus 
(
) 
{ 
if 
(
document 
. 
getElementById 
(
'inputid' 
) 
) 
{ 
document 
. 
getElementById 
(
'inputid' 
) 
. 
focus 
(
) 
; 
document 
. 
getElementById 
(
'inputid' 
) 
. 
value 
= 
'' 
; 
} 
else 
if 
(
document 
. 
getElementById 
(
'inputid' 
) 
) 
{ 
document 
. 
getElementById 
(
'inputid' 
) 
.focus 
(
) 
; 
document 
. 
getElementById 
(
'inputid' 
) 
. 
value 
= 
'' 
; 
} 
} 
function 
popitup 
(
url 
, 
name 
, 
width 
, 
height 
) 
{ 
newwindow 
= 
window 
. 
open 
(
url 
, 
name 
, 
'width=' 
+ 
width 
+ 
',height=' 
+ 
height 
+ 
',scrollbars=yes' 
) 
; 
if 
(
window 
. 
focus 
) 
{ 
newwindow 
. 
focus 
(
) 
; 
} 
return 
false 
; 
} 
+0

當您忘記分號時,Newlines *可以*在JavaScript中處理。不是依靠,很明顯...... – bobince 2009-08-22 13:07:02

+0

是的,我讀了關於新行同樣的事情:http://en.wikipedia.org/wiki/JavaScript_syntax#Whitespace_and_semicolons – Jeff 2009-08-22 13:11:22

0

你的變化看起來有效,但還有很多清理的代碼做。

  • 正如James Wiseman所說的,您要避免重複調用document.getElementById,它效率低下,難於閱讀。
  • formfocus,前兩個if語句是相同的;第二個是毫無意義的。
  • popitup,代碼要創建一個隱式的全局變量,這是一個壞的事情。它需要一個var

這樣:

function formfocus() 
{ 
    var elm; 

    elm = document.getElementById('inputid'); 
    if (elm) 
    { 
     elm.focus(); 
     elm.value = ''; 
    } 
} 

function popitup(url, name, width, height) 
{ 
    var newwindow = window.open(
     url, 
     name, 
     'width=' + width + ', height=' + height + ', scrollbars=yes' 
    ); 

    if (window.focus) 
    { 
     newwindow.focus(); 
    } 
    return false; 
} 

(有關隱含的全局變量,看blog.niftysnippets.org/2008/03/horror-of-implicit-globals.html;我做了一個環節,因爲這是我自己的博客 - 不,還有很多有 - 我不希望鏈接的垃圾郵件)

+0

謝謝! =)關於formfocus和冗餘的getElementById ...第二ELSE的目的是IF使得功能可用於一個以上的輸入ID。換句話說,我會在我的網站上有幾個需要關注的表單,每個表單都使用不同的ID。 – Jeff 2009-08-22 13:10:18