这是正确的JavaScript语法吗?

时间:2009-08-22 12:19:45

标签: 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. 周围的间距
  4. 在开放curly braces
  5. 之前的换行

5 个答案:

答案 0 :(得分:2)

是的,您的新语法有效,并且等效于旧语法。

除了非常模糊的情况之外,JavaScript代码中的换行符和空格都会被忽略,因此您可以根据自己的喜好进行布局。

但是旧的语法是如何编写惯用的JavaScript - 一位经验丰富的JavaScript程序员在看你的新语法会觉得它看起来很奇怪。

答案 1 :(得分:2)

尽量避免多次调用document.getElementByID:

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

答案 2 :(得分:1)

它有效。

这增加了可读性。

但是在你的发布版本中,最好缩小你的js文件以减少带宽使用。

Jsmin是一个javascript minifer。

  

JSMin是一个删除的过滤器   评论和不必要的空白   来自JavaScript文件。它通常   将文件大小减少一半,导致   下载更快。它还鼓励一个   更具表现力的编程风格   因为它消除了下载   清洁,识字的成本   自文档。

答案 3 :(得分:0)

是的,Javascript不是基于行的,并且大多数间距不是必需的。

你甚至可以用这样一些令人难以置信的方式编写代码:

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

答案 4 :(得分: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;我已将作为链接,因为它是我的自己的博客 - 不是那里有很多 - 而且我不想链接垃圾邮件。)