【问题标题】:Are commas necessary in Node.js?Node.js 中是否需要逗号?
【发布时间】:2013-02-19 22:27:07
【问题描述】:

在 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

用于全局变量。

但是这个问题是关于“逗号”的,所以在编辑我的问题(之前完成)时,请不要错误地用分号替换逗号。

【问题讨论】:

  • 你的意思是分号,而不是逗号?
  • 我的意思是逗号
  • 您包含的示例不需要逗号,我想不出逗号是可选的。
  • @JohnnyHK - 重新表述了这个问题,谢谢。
  • 你能举一个更好的例子吗?没有人会在全局变量声明行之间放置逗号;分号,是的,但不是逗号。

标签: javascript node.js syntax


【解决方案1】:

在 JavaScript 中,如果您不编写 分号 ;,它们将被插入,不可见。而且你可能并不总是喜欢他们去的地方。

从技术上讲,您不需要以分号结束每个语句。但是,大多数人认为这是个好主意。

如需更多信息,请仔细阅读this google search 的结果。这个话题我们争论了很久。


下面是一个示例,说明为什么这比乍看之下更复杂。虽然从技术上讲,您不需要以分号结束每个语句,但在某些情况下您必须这样做,否则事情会中断。在大多数代码库中,您不能完全忽略它们。

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 不是函数?!?它不应该是函数!”

或者您可以只使用分号以保持一致性。

【讨论】:

  • 是我还是你的代码无效?每个示例的末尾都有一个额外的括号。
  • 我实际上是指逗号,而不是分号
  • @user1943231 你说 “在 node.js 的变量声明中省略逗号会带来风险吗?” 只有分号才真正有意义。这就是为什么我们都感到困惑...您将不得不进一步解释您如何认为您需要使用逗号。
  • 可能是这个主题的最佳答案之一。
  • 如果可以的话,我会给你不止一个 +1。
【解决方案2】:

简而言之,没有。当您进行代码压缩等操作并且编译器认为您的两个语句是一个时,您可能会遇到的问题会出现。无论如何,如果你选择不使用逗号/分号,这是绝对不推荐的,你应该没问题。

【讨论】:

  • 一个会破坏你的代码的压缩工具?请告诉我名字,这样我就不用了。
  • 伙计们,我说的是逗号,而不是分号
【解决方案3】:

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

查看完整说明:Do you recommend using semicolons after every statement in JavaScript?

【讨论】:

【解决方案4】:

这个很晚的答案只是为可能阅读此内容的其他人消除了困惑。

由于您实际上在谈论逗号,而不是分号,我只能假设您对引擎隐式添加的内容有误解。

逗号不是可选的。而这段代码:

express = require('express')
jade = require('jade')

被隐式转换成这个:

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

不是这个,你可能会期待:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2015-01-04
    • 2014-04-15
    • 1970-01-01
    • 2013-10-16
    • 2010-10-27
    相关资源
    最近更新 更多