资讯专栏INFORMATION COLUMN

JavaScript的分号

DTeam / 1333人阅读

摘要:许多程序员包括本书中的示例代码使用分号来明确标记语句的结束,即使在并不完全需要分号的时候也是如此。为了能让上述代码解析为两条不同的语句,必须手动填写行尾的显式分号。第一个例外是在涉及和语句的场景中。

和其他许多编程语言一样,JavaScript使用分号(;)将语句分隔 开。这对增强代码的可读性和整洁性是非常重要的:缺少分隔符,一条语句的结束 就成了下一条语句的开始,反之亦然。在JavaScript中,如果语句各自独占一行,通 常可以省略语句之间的分号(程序结尾或右花括号“}”之前的分号也可以省略)。

许多JavaScript程序员(包括本书中的示例代码)使用分号来明确标记语句的结束, 即使在并不完全需要分号的时候也是如此。另一种风格就是,在任何可以省略分号 的地方都将其省略,只有在不得不用的时候才使用分号。不管采用哪种编程风格, 关于JavaScript中可选分号的问题有几个细节需要注意。

考虑如下代码,因为两条语句用两行书写,第一个分号是可以省略掉的:

a=3; 
b=4;

如果按照如下格式书写,第一个分号则不能省略掉:

a=3;b=4;

需要注意的是,JavaScript并不是在所有换行处都填补分号:只有在缺少了分号 就无法正确解析代码的时候,JavaScript才会填补分号。 换句话讲(类似下面代码中的两处异常),如果当前语句和随后的非空格字符不能当成一个整体来解析的话, JavaScript就在当前语句行结束处填补分号。看一下如下代码:

var a
a
=
3 console.log(a)

JavaScript将其解析为:

var a;a=3;console.log(a);

JavaScript给第一行换行处添加了分号,因为如果没有分号,JavaScript就无法解析代码 var a a。第二个a可以多带带当做一条语句“a;”,但JavaScript并没有给第二行结 尾填补分号,因为它可以和第三行内容一起解析成 “a=3;”

这些语句的分隔规则会导致一些意想不到的情形,这段代码写成了两行,看起来是两条独立的语句:

var y=x+f 
(a+b).toString()

但第二行的圆括号却和第一行的f组成了一个函数调用,JavaScript会把这段代 码看做:

var y=x+f(a+b).toString();

而这段代码的本意并不是这样。为了能让上述代码解析为两条不同的语句,必须手动填写行尾的显式分号。

通常来讲,如果一条语句以“(”、“[”、“/”、“+”或“-”开始,那么它极有可能和前一条语句合在一起解析。

以“/”、“+”和“-”开始的语句并不常见,而以“(”和“[”开始的 语句则非常常见,至少在一些JavaScript编码风格中是很普遍的。有些程序员喜欢保守地在语句前加上一个分号(有些代码合并工具也是这么干的),这样哪怕之前的语句被修改了、分号被误删除了,当 前语句还是会正确地解析:

var x=0//这里省略了分号 
;[x,x+1,x+2].forEach(console.log)//前面的分号保证了正确地语句解析

如果当前语句和下一行语句无法合并解析,JavaScript则在第一行后填补分号, 这是通用规则,但有两个例外。第一个例外是在涉及 returnbreakcontinue 语句的场景中。如果这三个关键字后紧跟着换行,JavaScript则会在换行 处填补分号。例如,这段代码:

return 
true;

JavaScript会解析成:

return;true;

而代码的本意是这样:

return true;

也就是说,在 returnbreakcontinue 和随后的表达式之间不能有换行。如果添加了换行,程序则只有在极特殊的情况下才会报错,而且程序的调试非常不方便。

第二个例外是在涉及“++”和“——”运算符的时候。这些运算符可以 作为表达式的前缀,也可以当做表达式的后缀。如果将其用做后缀表达式,它和表 达式应当在同一行。否则,行尾将填补分号,同时“++”或“——”将会作为下一行代 码的前缀操作符并与之一起解析,例如,这段代码:

x 
++ 
y

这段代码将解析为“x;++y”,而不是“x++;y”

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84889.html

相关文章

  • javascript时要不要省略分号

    摘要:自动填补分号的规则在说要不要写分号之前,先了解一下自动填补分号的规则。后来看到知乎上的作者尤雨溪和前端大神贺师俊的回答后,我对写分号的想法完全颠覆了。总是写分号并不能完全解决缺陷如后换行会自动插入分号。 在打算写这篇文章之前,我是一个分号党,在写这篇文章之后,可能会转为无分号党了。之前是写分号是编辑器语法较检所养成的强迫症,现在观念的转变,是因为看了不少大神的讨论后,觉得javascr...

    wupengyu 评论0 收藏0
  • 【知识点】Javascript分号规则

    摘要:花点时间搞清楚中的分号规则吧不管你喜欢结尾带分号或省略分号的模式分号允许的场景分号一般允许出现在大部分语句的末尾,比如等栗子仅有一个分号可以表示空语句在中合法,比如可解析为三个空语句空语句可用于辅助产生语法合法的解析结果,如如果没有末尾的 花点时间搞清楚JS中的分号规则吧~~~不管你喜欢结尾带分号或省略分号的模式 分号允许的场景 分号一般允许出现在大部分语句(statement)的末尾...

    kun_jian 评论0 收藏0
  • JavaScript分号自动插入

    摘要:中分号自动插入转译自链接描述在中,分号自动插入机制允许在一行代码结尾省略分号。比如分号自动插入规则分号插入只是一个术语。如果在这些位置遇到换行了,分号将被插入。 JavaScript中分号自动插入 转译自:链接描述在JavaScript中,分号自动插入机制允许在一行代码结尾省略分号。你应该养成一直书写分号的习惯,与此同时掌握JavaScript分号省略处理机制是十分重要的。因为这不仅有...

    dadong 评论0 收藏0
  • JavaScript分号省略

    摘要:规则三循环及空循环体的不能省略分号如最后我想说的是分号的省略与否完全是个人的编码风格,所以初学者不必死钻牛角尖,弄清楚原理才是最重要的。 传统的编程语言中分号是不可省略的,但在看JavaScript代码时,新手常常会发现很多知名的大牛们都省略了分号,为什么会这样呢?其实是因为JavaScript的自动插入分号技术,大多数情况下分号是可以省略的,下面说说自动插入分号的规则。 规则一:Ja...

    Mike617 评论0 收藏0
  • 细说 Javascript 拾遗篇(三) : 自动插入分号

    摘要:此时会自动插入分号,解析器将再次尝试。工作原理下面的代码没有分号,因此解析器将会自己判断在哪些地方插入分号。前置小括号在有前置小括号的情形时,解析器将不会自动插入分号。这不仅将保证代码整体的一致性,也将有效地避免解析器对代码行为的错误改变。 尽管 Javascript 有类似 C 的句法风格,但是它并不强制在代码中使用分号,所以分号可能被省略。Javascript 并不是一个缺少分号的...

    mushang 评论0 收藏0

发表评论

0条评论

DTeam

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<