JavaScript和Python中分号的区别是什么?
Python和JavaScript这两种编程语言都允许开发者使用或不使用分号。不过,我常常看到一些书籍和博客建议,在Python中不应该使用分号,而在JavaScript中则应该总是使用分号。
那么,这两种语言在使用分号上有没有什么技术上的区别,还是说这只是文化上的差异呢?
7 个回答
除了语法上的问题,这也和文化有关。在Python的文化中,任何多余的字符都是不受欢迎的,尤其是那些不是空格或者字母数字的字符,更是如此。
像是开头的$符号、分号和大括号这些东西,大家都不太喜欢。不过,你在代码里怎么写是你的事,但要真正理解一种语言,光学会语法是不够的。
这让我困惑了很久。我原以为这只是文化差异,觉得那些抱怨分号插入是语言最糟糕特性的人的确是个傻瓜。常被提到的例子来自于NullUserException的回答,我并没有被说服,因为不考虑缩进的情况下,Python在这方面的表现和JavaScript是一样的。
然后有一天,我写了类似这样的代码:
alert(2)
(x = $("#foo")).detach()
我原本期待它会被解释成这样:
alert(2);
(x = $("#foo")).detach();
结果实际上被解释成了这样:
alert(2)(x = $("#foo")).detach();
现在我开始使用分号了。
JavaScript只有在以下情况下才会把换行当作分号处理:
- 不这样做会导致语法错误。
- 换行出现在
throw
或return
关键字和一个表达式之间。 - 换行出现在
continue
或break
关键字和一个标识符之间。 - 换行出现在一个变量和后缀
++
或--
运算符之间。
这就留下了一些情况,行为可能和你预期的不一样。有些人2采用了只在必要时使用分号的习惯。我现在更喜欢遵循始终使用分号的标准习惯,因为我知道这并不是没有意义的。
1 我省略了一些小细节,想了解确切描述可以查阅ECMA-262 5e 第7.9节。
2 Twitter Bootstrap就是一个比较知名的例子。
在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项 - 自动分号插入。