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

JavaScript和Python中分号的区别是什么?,javascript,python,syntax,Javascript,Python,Syntax,Python和JavaScript都允许开发人员使用或省略分号。然而,我经常看到(在书籍和博客中)有人建议我不应该在Python中使用分号,而应该始终在JavaScript中使用分号 这些语言使用分号的方式有技术上的差异吗?还是这只是文化上的差异?Python中的分号是完全可选的(当然,除非您希望在一行中有多个语句)。我个人认为,每条语句末尾都带有分号的Python代码看起来非常难看 现在在Javascript中,如果您不写分号,那么会自动在行尾插入一个分号。这可能会引起问题。考虑: funct

Python和JavaScript都允许开发人员使用或省略分号。然而,我经常看到(在书籍和博客中)有人建议我不应该在Python中使用分号,而应该始终在JavaScript中使用分号


这些语言使用分号的方式有技术上的差异吗?还是这只是文化上的差异?

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

现在在Javascript中,如果您不写分号,那么会自动在行尾插入一个分号。这可能会引起问题。考虑:

function add(a, b) {
  return
    a + b
}
您可能认为这会返回
a+b
,但Javascript比您聪明,并将其视为:

function add() {
  return;
    a + b;
}
返回未定义的


1有关更多详细信息和注意事项,请参见第27页第7.9项-自动插入分号。

除了句法问题外,部分原因是文化因素。在Python文化中,任何外来字符都是一种诅咒,而那些不是空格或字母数字的字符更是如此


因此,像前导$符号、分号和花括号之类的东西不受欢迎。不过,在代码中做什么取决于您,但要真正理解一种语言,仅仅学习语法是不够的

JavaScript被设计成“看起来像C”,所以分号是文化的一部分。如果分号“丢失”,Python语法差异很大,不会让程序员感到不舒服。

在Python代码中看不到分号的原因是:没有人需要分号,没有分号的代码看起来更干净

一般来说,分号只是一种传统。许多新的语言已经不再使用它们(以Python、Ruby、Scala、Go、Groovy、Io为例)。程序员不需要它们,编译器也不需要。如果一种语言不允许你输入一个不需要的额外字符,你会想利用它,不是吗


只是JavaScript删除它们的尝试并不是很成功,许多人更喜欢使用它们,因为这样代码就不那么模棱两可了。

这让我困惑了很长一段时间。我认为这只是文化差异,每个抱怨分号插入是语言中最糟糕的特征的人都是个白痴。经常重复的例子并没有动摇我,因为不管缩进如何,Python在这种情况下的行为与JavaScript相同

有一天,我隐约写下了这样的话:

alert(2)
(x = $("#foo")).detach()
alert(2);
(x = $("#foo")).detach();
alert(2)(x = $("#foo")).detach();
我希望它被解释成这样:

alert(2)
(x = $("#foo")).detach()
alert(2);
(x = $("#foo")).detach();
alert(2)(x = $("#foo")).detach();
实际上是这样理解的:

alert(2)
(x = $("#foo")).detach()
alert(2);
(x = $("#foo")).detach();
alert(2)(x = $("#foo")).detach();
我现在使用分号

在以下情况下,JavaScript仅1将换行符视为分号:

  • 不这样做是一个语法错误
  • 换行符位于
    throw
    return
    关键字和表达式之间
  • 换行符位于
    continue
    break
    关键字和标识符之间
  • 换行符位于变量和后缀
    ++
    --
    运算符之间
这就使得这样的情况下,行为不是你所期望的。有些人采用了只在必要时使用分号的约定。我更喜欢遵循总是使用它们的标准惯例,现在我知道这不是毫无意义的


1我略去了一些小细节,请查阅详细说明。

2是一个引人注目的例子。

主要是Python看起来一点也不像Java,而JavaScript则不像,这导致人们以这种方式对待它。在JavaScript()中使用分号很简单,其他任何东西都是FUD。

这怎么会是“不具建设性的”@NullUser:这不是维基百科,但你能指出一个明确的参考,一个基于惯例以外的东西的参考吗?我建议将这个问题改为类似的标题Python和JavaScript处理换行符和分号的方式有什么区别?“按照措辞,这更多的是一个关于文化的问题,而不是技术差异。这可能就是人们投票关闭的原因。这是一个分离
程序员的例子。
stackoverflow
的stackexchange
是一个微妙的情况。@wong2:我编辑了这个问题,使它更关注客观的技术方面,而不是主观的文化方面,希望重新打开。如果您不同意,请随时撤消此编辑。在Python中,您的语句必须正确终止,否则将导致语法错误。此外,如何在不触发意外缩进错误的情况下完成类似的操作?事实上,我发现自己在Python中使用分号的唯一情况是从命令行使用
timeit
。分号允许您在一行中有多个语句。仅供参考:此答案不能继续解释为什么
return\n a+b
不会导致outMarting
返回\a+b,但杰里米·班克斯在下面的回答中解释说:JavaScript只会将换行符视为分号,如果它是一个语法错误,那么就不要这样做。@Konerak Jeremy Banks骗了你。对于后跟换行符的任何return语句,都会自动插入分号。这是一个相当常见的bug来源,尤其是在那些喜欢将对象文本的左括号放在新行的人中。@sethobrien:我试图简化事情,但似乎做得很糟糕。我将编辑我的帖子来解释细节,而不是试图掩盖它们。虽然其他关于JS错误解释它们的观察是好的,但我认为这是真正的原因。这个论点让我觉得有点循环。如果没有分号,也许还有大括号,Javascript看起来就根本不像C了