JavaScript中作为标点符号的空格字符

JavaScript中作为标点符号的空格字符,javascript,Javascript,在ECMAScript规范()的第7.7章(标点符号)中,标点符号网格在最后一列的第3行中似乎有一个间隙。这实际上是空格字符标点符号,对吗 我知道可以选择在JavaScript代码中的标记之间插入空格字符(为了提高可读性),但是,我想知道在哪里需要空格字符 为了找到答案,我在jQuery库的缩小版本中搜索了空格字符。以下是我的结果: 需要一个空间。。。(见下文更新) 。。。在关键字和标识符之间: function x(){} var x; return x; typeof x; new X();

在ECMAScript规范()的第7.7章(标点符号)中,标点符号网格在最后一列的第3行中似乎有一个间隙。这实际上是空格字符标点符号,对吗

我知道可以选择在JavaScript代码中的标记之间插入空格字符(为了提高可读性),但是,我想知道在哪里需要空格字符

为了找到答案,我在jQuery库的缩小版本中搜索了空格字符。以下是我的结果:

需要一个空间。。。(见下文更新)

。。。在关键字和标识符之间:

function x(){}
var x;
return x;
typeof x;
new X();
。。。在两个关键字之间:

return false;
if(x){}else if(y){}else{}
这是我确定的两个案例。还有其他情况吗

注意:字符串文本中的空格字符不被视为标点或标记(显然)

更新:事实证明,在这些情况下,不需要空格字符。例如,关键字标记和标识符标记必须由某个字符分隔,但该字符不必是空格字符。它可以是不是标记的任何输入元素(
空白
行终止符
注释


另外…似乎空格字符被视为一个
空白
输入元素,而不是一个标记,这意味着它不是标点符号

我不认为gap是一个空格,不,我认为它只是一个gap(不幸的一个)。如果他们真的想列出一个空格,我希望他们会像文档中其他地方一样使用“空白”。但是空格作为标点符号并没有真正的意义

我相信空格(和其他形式的空格)是分隔符。spec通过省略而不是显式地定义它们。
function
x
之间需要空格,因为除此之外,您有标记
functionx
,它当然不是关键字(尽管它可以是名称标记-例如变量、属性或函数名)

您需要在某些标记(标识符和保留字)周围使用分隔符,因为这就是我们识别这些标记的开始和结束位置的方式-IdentifierName以IdentifierStart开头,后跟零个或多个IdentifierParts,该类不包括空格或任何用于标点符号的字符。我们可以在没有分隔符的情况下识别其他标记(例如标点符号)。我想就是这样,所以你们的两条规则几乎就是同一条规则的两个例子:标识名必须用空格、标点符号、文件的开头或结尾等来分隔


有点离题,但当然不是所有的分隔符都相等。断行分隔符有时会被语法专门处理为“分号插入”这种恐怖行为。

这只是一个猜测,但我想说,实际上任何地方都不需要空格。它们被用作在关键字之间生成单词边界的众多备选方案之一。这意味着您可以用其他字符替换它们

如果您想从一些代码中删除不必要的空格,我会说空格(更确切地说,是空白,制表符也可以)只有在没有其他分隔关键字和/或变量标识符的方法的情况下才是必需的。例如,通过删除空白,您在生成的代码中不再具有相同的关键字和标识符


下面的内容与您的需求并不完全相关,但您可能会发现它很有趣。您可以编写示例,这样它们就不再有这些空格。我希望这些例子都没有错

x=function(){}
而不是
function x(){}

this.x=null而不是
var x
返回(x)
而不是
返回x
typeof(x)而不是x的
类型
y=X()而不是
y=new X()
返回(false)
而不是
返回false


if(x){}else{if(y){}else{}
而不是
if(x){}else如果(y){else{}

在任何情况下都不需要空格。您只需要编写一种语法,使解析器能够理解。换句话说:机器必须知道您使用的是
function
new
之类的关键字,还是定义另一个变量,如
newFunction

每个关键字都必须以某种方式进行分隔-空格是最合理和可读的,但是它们可以被替换:

return/**/false;
return(false);

@克劳德:但是,为什么网格中会有缺口呢?这必须是故意的。它是在第三版和第五版,这是10年后。所以他们有足够的时间对规范进行适当的格式化。很难说这个间隙是否应该是空白,但空白字符被平等对待是正确的。例如,您可以使用制表符或换行符声明
else if
,将
else
if
分开。空白是分隔符,当你考虑诸如“代码>1”。TopiCube(2) .@ I.IM.VIDAS:在查看规范文档时,当它被缠绕到最后一个副本(并与监督它的人有点互动)时,我发现编辑一点都不惊讶。奇怪。。。那种。一点也不。考虑到PDF的标题是“最终最终最终草稿标准ECM-262第五版”,你会感觉到他们对编辑这件事有多么厌倦。Šime Vidas:第5版第5.1.2节:“除空格和注释外的输入元素构成ECMAScript语法的终端符号,称为ECMAScript标记。这些标记是保留字、标识符和文字