2014-01-20 32 views
4

我遇到了一些奇怪的,在我看来,行为。我想我不明白发生了什么,所以如果有人能帮助我......我会很高兴。带括号返回并且没有得到不同的结果

function dateString1(date) { 
return (
    ('0' + date.getDate()).slice(-2) + '/' + 
    ('0' + (date.getMonth()+1)).slice(-2) + '/' + 
    date.getFullYear() 
); 
} 


function dateString2(date) { 
return 
    ('0' + date.getDate()).slice(-2) + '/' + 
    ('0' + (date.getMonth()+1)).slice(-2) + '/' + 
    date.getFullYear() 
; 
} 

所以,dateString1将返回我要找的字符串,但dateString2将返回undefined。检查了Chrome和IE8。

发生了什么事?

感谢

+0

查找自动插入分号。 –

回答

10

在JS新行把什么是一个愚蠢的想法,因为这个原因。自动分号插入会破坏你的代码,return;是JS引擎如何解释你的代码(它本身就是一个有效的语句)。把这样的:

function dateString2(date) { 
    return ('0' + date.getDate()).slice(-2) + '/' + 
    ('0' + (date.getMonth()+1)).slice(-2) + '/' + 
    date.getFullYear(); 
} 

远离从这样的事情:

if (something) 
{ 
    // logic 
} 

并始终使用这种风格:

if (something) { 
    // logic 
} 
+0

有没有办法禁用ASI?我想这是“严格使用”;是不足够的。 –

+2

你的答案的第二部分与问题无关,而且是主观的(我个人喜欢你提出的风格,但其他人则以[K&R]发誓(http://en.wikipedia.org/wiki/1_true_brace_style#K。 26R_style),没有技术上的理由可以选择那个)。 –

+0

@SilviuBurcea ASI是一种语言功能,您不能禁用它。您可以使用[JSHint](http://www.jshint.com/)扫描代码以查找可能的错误(通过Web界面,命令行工具或集成在文本编辑器中)。 –

相关问题