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

62 投票
7 回答
7271 浏览
提问于 2025-04-17 00:28

Python和JavaScript这两种编程语言都允许开发者使用或不使用分号。不过,我常常看到一些书籍和博客建议,在Python中不应该使用分号,而在JavaScript中则应该总是使用分号。

那么,这两种语言在使用分号上有没有什么技术上的区别,还是说这只是文化上的差异呢?

7 个回答

8

除了语法上的问题,这也和文化有关。在Python的文化中,任何多余的字符都是不受欢迎的,尤其是那些不是空格或者字母数字的字符,更是如此。

像是开头的$符号、分号和大括号这些东西,大家都不太喜欢。不过,你在代码里怎么写是你的事,但要真正理解一种语言,光学会语法是不够的。

69

这让我困惑了很久。我原以为这只是文化差异,觉得那些抱怨分号插入是语言最糟糕特性的人的确是个傻瓜。常被提到的例子来自于NullUserException的回答,我并没有被说服,因为不考虑缩进的情况下,Python在这方面的表现和JavaScript是一样的。

然后有一天,我写了类似这样的代码:

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

我原本期待它会被解释成这样:

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

结果实际上被解释成了这样:

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

现在我开始使用分号了。

JavaScript只有在以下情况下才会把换行当作分号处理:

  • 不这样做会导致语法错误。
  • 换行出现在throwreturn关键字和一个表达式之间。
  • 换行出现在continuebreak关键字和一个标识符之间。
  • 换行出现在一个变量和后缀++--运算符之间。

这就留下了一些情况,行为可能和你预期的不一样。有些人2采用了只在必要时使用分号的习惯。我现在更喜欢遵循始终使用分号的标准习惯,因为我知道这并不是没有意义的。


1 我省略了一些小细节,想了解确切描述可以查阅ECMA-262 5e 第7.9节
2 Twitter Bootstrap就是一个比较知名的例子。

72

在Python中,分号是完全可选的(当然,如果你想在一行中写多个语句的话就需要用到分号)。我个人觉得在每个语句后面加分号的Python代码看起来非常难看。

而在JavaScript中,如果你不写分号,系统会自动在行末加一个1。这可能会引发一些问题。比如:

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

你可能以为这会返回 a + b,但JavaScript却聪明地把它理解成:

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

结果返回的是 undefined

1 有关更多细节和注意事项,请查看 ECMAScript语言规范 第27页,第7.9项 - 自动分号插入。

撰写回答