消息
登录即可查看消息记录
当前位置: 首页 >文章 > JavaScript - 分号的使用
收藏
分享

JavaScript - 分号的使用

举报李游Leo李游Leo发布于 2021-04-26186阅读3点赞
JavaScript 并不是在所有换行处都填补分号...

JavaScript和其他编程语言一样都可以使用分号,其用法就是使用分号(;)将执行语句隔开。它更像是中文中的句号,告诉每一句话的结束,分号在程序中则是象征着每一条程序代码的结束。当我们使用分号对代码进行分隔之后,对代码的整体的可读性和整洁性是非常重要的,如果不写分号,上一条语句的结束就成了下一条语句的开始,反之亦然。但是 JavaScript 中的分号是可选的,JavaScript 并不严格要求使用分号。 当有一个需要分号的地方时,JavaScript 会在解析时自动添加。执行此操作的过程称为自动插入分号。了解必须使用分号的规则非常重要,以避免编写产生错误的代码,因为它们的行为可能会与您预期的不同。



JavaScript 自动插入分号的规则

JavaScript 并不是在所有换行处都填补分号:只有在缺少了分号就无法正确解析代码的时候,JavaScript才会填补分号。在解析源代码期间,要是发现以下特定的情况时,JavaScript 解析器将会自动添加分号 :

当下一行代码开始会破坏当前一行的代码时( JavaScript 代码可以写在多行中 )。如果一条语句以(、[、/、+或-开始,那么它极有可能和前面一条语句合在一起解析。

当下一行以 } 开头时,或者以 } 结束闭合当前代码块时。

1.当解析到达源代码文件的末尾时。

2.当前行 return 语句后面紧跟着换行时。

3.当前行 break 语句后面紧跟着换行时。

4.当前行 throw 语句后面紧跟着换行时。

5.当前行 continue 语句后面紧跟着换行时。


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


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

值得注意的是,JavaScript 就像我上述描述的一样,JavaScript只有在自身无法解析代码的时候,才会自动填补分号。例如:


JavaScript会自动填补分号,将其解析为:

我们可以通过规则简单来分析一下最后的解析结果,JavaScript给第一行末尾处添加了分号,试想一下如果没有分号,JavaScript就无法解析代码var c f。第二个f虽然可以单独当做一条语句“f;”,但是JavaScript并没有给第二行代码结尾处添加分号,因为它可以和第三行和第四行组成“f =10;”。

不过呢,因为这些分隔的规则会导致一些意想不到的状况,例如:

这里运行之后,会引发代码异常“TypeError: b is not a function”,JavaScripr 会爆出一个b不是个函数的错误,然而这段代码的本意并不是这样,那么这个是怎么出现问题了呢?

其实是因为第四行圆括号和第三行的b组成了一个函数调用,所以JavaScript 会把这段代码看做为:

通过以上代码,我们可以看到第三行和第四行组成之后b组成了一个函数,造成后面的错误,为了避免以上的错误,我们必须手动填写行尾的显示分号。

当然通过上述的规则,我们也可以这样灵活运用分号,例如:

在第四行的前面的分号保障的b与后面括号的分隔,这样 JavaScript 就可以按照我们的本意去执行语句了。也就是说分号可以灵活的在语句之前放入,不一定非要在语句之后放入。

不过在规则中我们也说明了,如果涉及到 return、break、throw、continue 语句时,JavaScript则会自动在后面填补分号,例如在某函数中:

JavaScript会自动把解析成成:

而我们的本意应该是这样:

所以也就是说,在上述这些特殊语句中,表达式之间建议不要使用换行,以免出现不必要的问题。如果添加了换行,程序则只有在在极特殊的情况下会出现报错,所以在调试或者可读方面也会非常的不方便。

还有一些特殊的运算符,比如“++”和“--”运算符,这些运算符可以作为表达式的前缀或者后缀,JavaScript在分隔的默认解析中都是以代码的前缀进行解析操作,如果想以后缀显示,需要让运算符和表达式在同一行显示,例如:



那么这行代码会默认解析成“a;++b;”,则不是“a++;b”,想获得后者,就需要让其运算符和表达式在一行显示,例如:

在此时,JavaScript 就会分隔解析成“a++;b;”。




本文原创,未经作者允许不可转载!

更多内容,欢迎关注作者微信公众号:李游leo老师在线课堂!


0条评论
别默默看啦~登录/注册一起参与讨论吧~

暂无评论

请选择举报理由

违反法律法规

侵犯个人权益

有害网站环境

更多训练营>>

为你推荐 · 训练营(全勤打卡报名费全额返累计全额返用户80,562人)

【5月】零基础精品商业海报特训班
距离开班仅剩1天110人已报名
【5月】陈惟·零基础7天入门CG绘画
距离开班仅剩1天103人已报名
【5月】21天PS插画技法班
距离开班仅剩2天64人已报名
特惠
充值
7折购
今日还在继续学习的你,太棒了!
7
折扣券可用于
年费无限VIP
立 即
使 用
此活动优惠不可与其他活动叠加使用
有效期:000000
手机版
虎课移动APP
支持视频下载,随时随地学习
桌面客户端 >
邀新有礼
建议意见
官方客服

官方客服

您可以与在线客服进行沟通或者拨打客服热线获得帮助

客服热线:400-862-9191工作日:9:30-18:30

在线咨询:联系客服工作日:9:00-22:00

节假日:9:00-18:00

虎课积分

恭喜你,领取成功

开课时间:

新人免费领取免费¥99

扫码开通训练营权限

打开微信“扫一扫”功能
扫码上方二维码

免费学习70000+个教程!
配套素材、源文件一键下载!
昨日学员已学习了110,492
并提交了1,564份作业!
登录后立即学习!
loading
微信扫码关注即可登录
您需要同意协议才可以进行登录
已连续签到0
第一天
5个虎课币
第二天
10个虎课币
第三天
15个虎课币
第四天
20个虎课币
第五天
40个虎课币
第六天
20个虎课币
第七天
20个虎课币
立即签到
已签到
每周一重置签到奖励
已连续签到0
本周斩获110个虎课币,下周也要来哦
我知道了
已连续签到0
哎呀,签到失败了!
再次签到
哎呀,系统出现错误,请稍后重试!
恭喜!签到成功,获得 10 个虎课币
上上签 ·21August.2018
尽管眼下十分艰难,可日后这段经历说不定就会开花结果
— 唐代文学家 韩愈
训练营坚持完成打卡任务 报名费全额返更多>>
直播公开课学员好评率95%以上更多>>
登录虎课网全站 70000+ 视频会员教程 | 每日可免费学 1