在Node.js中是否需要逗号?

7
在node.js变量声明时省略逗号是否会有风险?例如,像以下声明一些全局变量就可以正常工作:
express = require('express')
jade = require('jade')

我不想写逗号,如果不写是安全的话(我不关心“代码美观/清晰”的争论)。
重要提示:我指的是逗号,而不是分号(有3个答案涉及到了分号)。在node.js中删除分号是完全可以的甚至推荐的。npm的创建者也这样做:http://blog.izs.me/post/3393190720/how-this-works 如有疑问,请查看最新的javascript规范:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf 请注意,您也无需编写

标签。
var

全局变量。

但是这个问题关于“逗号”,所以请注意在编辑我的问题时不要错误地将逗号替换为分号(之前已经发生过这种情况)。


2
你是不是指分号,而不是逗号? - JohnnyHK
1
我实际上是指逗号。 - user1943231
@JohnnyHK - 重新表述了问题,谢谢。 - user1943231
我不仅仅是在谈论全局变量。所有类型的变量都包括在内。实际上,三个大型的JavaScript GitHub项目通过逗号分隔全局变量,因此我认为这是一种常见的做法:https://github.com/joyent/node、https://github.com/isaacs/npm、https://github.com/visionmedia/jade - user1943231
你是指逗号操作符吗?https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comma_Operator - Jean-Philippe Leclerc
显示剩余3条评论
4个回答

19
在JavaScript中,如果你没有写分号 ; ,它们会在不可见的情况下自动插入。有时候你可能不喜欢它们被插入的位置。
技术上讲,你不需要在每个语句结尾加上分号,但大多数人认为这是一个好习惯。
了解更多信息,请查看这个谷歌搜索结果。我们已经就这个话题争论了很长时间。
以下是一个例子,说明为什么这比表面上看起来更复杂。虽然技术上讲你不需要在每个语句结尾加上分号,但在一些情况下你必须这样做,否则会出现问题。在大多数代码库中,你不能完全省略它们。
foo.def = bar
(function() {
  // some self executing closure
})()

看起来相当简单,对吧?那么解释器会看到这个并执行以下操作:

foo.def = bar(function() {
  // some self executing closure
})()

这可能不是您预期的结果。修正它的方法是使用分号。

foo.def = bar;
(function() {
  // some self executing closure
})()

有很多类似这样的情况。你可以学习它们所有,并仅在这些情况下使用它们,在你不可避免地忘记时,尝试调试你的代码,它会做一些奇怪和离奇的事情,让你花费数小时才能弄明白...“你说的 wtfvar 不是函数?!?它不应该是一个函数!”

或者你可以一贯地使用分号。


是我的问题还是你的代码不合法?每个示例的末尾都有一个多余的括号。 - Jean-Philippe Leclerc
1
我实际上指的是逗号,而不是分号。 - user1943231
1
@user1943231,你说“在node.js变量声明中省略逗号是否会产生风险?”这句话只有在使用分号时才有意义。这就是为什么我们都感到困惑的原因...你需要进一步解释一下你认为需要如何使用逗号。 - Alex Wayne
1
这可能是关于这个主题最好的答案之一。 - Michael J. Calkins
如果可以的话,我会给你不止一个+1。 - Lorenzo Marcon

0
这个非常晚的答案只是为了澄清可能会阅读此内容的其他人的困惑。
既然你实际上在谈论逗号而不是分号,我只能假设你对引擎隐含添加的内容有误解。
逗号是不可选的。而这段代码:
express = require('express')
jade = require('jade')

正在被隐式转换为这个:

var express = require('express');
var jade = require('jade');

不是你可能期望的这个:

var express = require('express'),
    jade = require('jade');

0
简而言之,不行。当您尝试进行代码压缩时,编译器会将您的两个语句视为一个语句,因此您可能会遇到问题。无论如何,如果您选择不使用逗号/分号(这绝对不被推荐),那么您应该没问题。

1
一个会破坏你代码的压缩工具?请告诉我它的名字,这样我就永远不会使用它了。 - Jean-Philippe Leclerc
各位,我在讲逗号,不是分号。 - user1943231

0

Node.js使用V8引擎读取您的代码,因此它的行为基本上与Google Chrome相同。也就是说,通常不使用分号是一种不好的做法。解释器将尝试理解您的代码,并有时可能会出现错误(由于您的错误)。

查看此处以获取完整说明:您是否建议在JavaScript中的每个语句后使用分号?


2
不使用分号并不是一种不好的实践:http://blog.izs.me/post/3393190720/how-this-works - user1943231
如有疑问,请查看规格说明书:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf - user1943231
1
这可能是一个不好的做法。JavaScript 是一种应该无论格式如何都能正常工作的语言。 - Jean-Philippe Leclerc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接