JavaScript和Python中的分号有什么区别?

Python和JavaScript都允许开发人员使用或省略分号。 不过,我经常看到(在书籍和博客中)build议我不要在Python中使用分号,而我应该总是在JavaScript中使用它们。

在语言如何使用分号之间是否存在技术差异,或者这只是一种文化差异?

Python中的分号是完全可选的(当然,除非你想在一行中有多个语句)。 我个人认为在每个语句结尾处都带有分号的Python代码看起来非常难看。

现在在Javascript中,如果不写分号,则在行尾自动插入1 。 这可能会导致问题。 考虑:

 function add(a, b) { return a + b } 

你会认为这返回a + b ,但JavaScript只是超过你,并认为这是:

 function add() { return; a + b; } 

改为返回undefined

1请参阅第27页的第7.9项 – ECMAScript语言规范中的自动分号插入以获取更多详细信息和注意事项。

这让我困惑了最长的时间。 我认为这只是一种文化差异,大家抱怨分号是语言中最糟糕的特征,这是一个白痴 。 从NullUserException的答案经常重复的例子并没有影响我,因为不考虑缩进,在这种情况下,Python的行为与JavaScript相同。

然后有一天,我写了一些模糊的东西:

 alert(2) (x = $("#foo")).detach() 

我希望这样解释:

 alert(2); (x = $("#foo")).detach(); 

它实际上是这样解释的:

 alert(2)(x = $("#foo")).detach(); 

我现在用分号。

在这些情况下,JavaScript将只处理一个换行符作为分号:

  • 这不是一个语法错误。
  • 换行符在throwreturn关键字和expression式之间。
  • 换行符在continuebreak关键字和一个标识符之间。
  • 换行符在variables和后缀++--运算符之间。

这样的情况下,行为是不是你所期望的。 有些人2已经采用了在必要时只使用分号的约定。 我更喜欢遵循总是使用它们的标准惯例,现在我知道这不是毫无意义的。


1我省略了一些小的细节,请参阅ECMA-262 5e第7.9节的确切说明。
2 Twitter Bootstrap是一个高调的例子。

除了语法问题之外,还有一部分是文化的。 在Python文化中,任何多余的字符都是一种诅咒,而那些不是空格或字母数字的字符是双重的。

因此,不喜欢领先的$符号,分号和花括号。 你在代码中做什么,取决于你,但要真正理解一门语言,仅仅学习语法是不够的。

JavaScript被devise成“看起来像C”,所以分号是文化的一部分。 如果分号“缺失”,Python语法就不足以使程序员感到不舒服。

Python代码中没有看到它们的答案是:没有人需要它们,没有它们,代码看起来更干净。

一般来说,分号只是一个传统。 很多新的语言都把它们放在了一起(比如Python,Ruby,Scala,Go,Groovy,Io)。 程序员不需要它们,编译器也不需要它们。 如果一种语言让你不需要input一个你从不需要的额外字符,那么你会想利用这个,不是吗?

只是JavaScript试图放弃它们并不是很成功,许多人更喜欢使用惯例,因为这会使代码变得模糊。

大多数情况下,python看起来没有像java,而javascript,这导致人们以这种方式对待它。 用javascript( http://mislav.uniqpath.com/2010/05/semicolons/ )使用分号非常简单,其他都是FUD。

我一直认为这个约定与边缘案例有关,而且更多的是为了节省带宽,JavaScript经常被压缩/缩小。 这样的缩小的代码几乎肯定会没有分号。

 a = 2 b = 3 return a + b // minified a=2b=3return a+b