【发布时间】:2014-09-11 13:11:20
【问题描述】:
从历史上看,我喜欢打断表达式,以便在续行中显示“显然不完整”的偏见:
var something = foo + bar
+ baz(mumble);
这种态度源于使用需要分号来终止表达式的语言。由于没有分号,第一行已经明显不完整,所以最好让读者清楚第二行不完整。
替代方案是:
var something = foo + bar +
baz(mumble);
这对我来说不是很好。现在,判断baz(mumble); 不是独立的(除了缩进)的唯一方法是将您的眼睛扫描到上一行的末尾。 *(这可能很长,因为你需要首先打破它。)*
但在奇怪的 JavaScript 领域,我开始看到人们将代码从第一种形式更改为第二种形式,并警告“自动分号插入”。它肯定会导致some surprising behaviors。在我将“了解什么是自动分号插入以及我是否也应该这样做”时,并不想深入研究那个切线。 进入我的无限任务队列。
当我仔细研究它时,我发现自己半信半疑……但不确定……我使用它的方式没有危险。如果我不小心把+ 写下来,问题似乎就会出现:
var something = foo + bar
baz(mumble);
...然后 JavaScript 会在 foo + bar 之后为您插入一个分号,这似乎是因为这两行都是独立的完整表达式。我推断也许那些其他 JavaScript 程序员认为将“明显故意不完整”位偏向待续行的末尾会更好,因为它指出了 没有分号的位置。
然而,如果我正确地陈述了我的前提,我正在以一种随后的线条“显然不完整”的方式来设计我的虚线。如果不是这样,那么我一开始就不会认为我的方式是一种优势。
我是对的吗,我的方式对于我描述的如何使用续行的条件没有风险?是否存在任何“看似不完整”的表达陷阱,实际上却以令人惊讶的方式完整?
为了提供“以令人惊讶的方式完成”的示例,请考虑+ 1; 是否可以单独解释为一行中的正数。它似乎可以:
但是 JSFiddle 为此返回 6:
var x = 3 + 2
+ 1;
alert(x)
也许这只是控制台中的一个怪癖,但它让我担心我的“只要第二行不单独作为完整表达式就可以了”解释。
【问题讨论】:
-
如果您省略连接
+,这两种形式都会插入一个分号,因此您更喜欢哪一种是个人喜好(因此在这里不是真正要问的问题)。 -
也许你应该从不同的角度来看待它。为什么你的代码中有这样的模式,你能做些什么呢?所有可以连接的东西都可以减少,那么
[foo, bar, baz(mumble)].reduce(sum)怎么样,你可以随意缩进数组。 -
@RobG 我会接受“你是正确的,你没有忽略任何危险的东西”作为答案,如果这是答案的话。 (或者换一种说法,如果我确定这完全是主观的,我就不会问了。)
-
似乎是一个完全合理的问题。
-
@bmargulies 不,这不是我的问题。一个人可以问一个规范的含义被怀疑的问题。如果不是,那么很多 C 和 C++ 问题与 Where do I find the current C or C++ standard documents 重复
标签: javascript newline ecmascript-5 code-formatting