时间:2021-05-28
javascript每条语句都是以分号结束,但由于javascript具有分号自动插入规则,所有不同的编程人员有不同的习惯,有的加分号,有的不加分号,那么到底加分号好还是不加分号好?本文章向大家探讨javascript每条语句该不该加分号。
javascript的分号代表语句的结束符,但由于javascript具有分号自动插入规则,所以它是一个十分容易让人模糊的东西,在一般情况下,一个换行就会产生一个分号,但实际情况却不然,也就是说在javascript中换行可能产生分号,也可能不产生,是否自动插入分号,主要看上下行。所以即使是经验丰富的程序员,有时候也会头大。
JavaScript自动加分号规则:
接下来我们来分组看不加分号导致的语法歧义:
第一种是++和--两种运算符出现在上一行结尾的情况,下一行以以下开头时,会产生语法歧义:
function delete void typeof new null true false NumericLiteral StringLiteral RegularExpressionLiteral ( [ { Identifier ++ -- + - ~ !
其中,function和delete是非常常用的statement开头。
特别是 ++和--单独被断为一行的时候,因为JS的语法规则规定后自增运算不允许中间插入换行,所以++和--会被视为前自增而跟下一行连接在一起。
第二种是return作为上一行结尾的情况,下一行以以下开头时,会产生语法歧义:
function delete void typeof ( [ { Identifier ++ -- + - ~ !
同样因为JS语法的规则不允许在return 和后面的值之间插入换行,所以return之后只要有换行符就会视为有分号,这常常会与使用者的期望不符合。
第三种是下一行以+和-开头的情况,上一行以以下结尾是,会产生语法歧义:
-- ++ IdentifierName ] ) } RegularExpressionLiteral
因为很少有语句以+或者-开头,所以这种情况不算危险。
第四种是上一行以break、continue结尾的情况,下一行以Identifier开头时,会产生语法歧义。
第五种是下一行以(和[开头的情况,上一行以以下结尾是,会产生语法歧义:
-- ++ IdentifierName ] ) } RegularExpressionLiteral StringLiteral NumericLiteral BooleanLiteral NullLiteral Identifier this
这种情况非常危险(所以hax的文章中要提出这种情况应该语句前写分号),几乎上一行的所有情况都将导致正常期望之外的结果。
第六种是,当下一行以RegularExpressionLiteral 开头的情况,上一行的以下结尾,会导致/被理解为除号:
-- ++ IdentifierName ] ) } RegularExpressionLiteral StringLiteral NumericLiteral BooleanLiteral NullLiteral Identifier this
实践出真理,看一下下面这些例子,就明白,分号自动插入不是那么好让人捉摸的。稍微不注意就会让你头大。
return引起的血案:
function test(){ var a = 1; var b = 2; return //会自动插入分号 ( a+b )};alert(test());一个返回a+b值的函数,初看没任何问题,但运行alert的结果却是undefined。根据分号的自动插入规则,return 语句后面如果有换行就会自动插入分号,没有返回值也就比较好理解了。如果需要换行的话,可以这样:
function test(){ var a = 1; var b = 2; return ( a+b )};alert(test());两个闭包引起的血案:
(function (){ var a;})() //不会自动插入分号(function (){ var b;})()很诡异,解释不了,谁能告诉我~
for语句头中的两个分号,不自动插入分号
for( var a=1,b=10 //不会自动插入分号 a<b //不会自动插入分号 a++ ){}总结
以上就是对JavaScript 分号的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
JS中function的开头有必要加分号吗?js语句后应该加分号吗?javascript大括号后面应使用分号吗?JS中function的开头有加感叹号、分号是什
前言相信从事过C#和Java的大家都知道分号是用作断句(EOS,endofstatement)的,而且必须加分号,否则编译就不通过了。但JavaScript由于
Kafka常用命令行详细介绍及整理以下是kafka常用命令行总结:1.查看topic的详细信息./kafka-topics.sh-zookeeper127.0.
jsthis函数详解本文对Javascriptthis函数进行详细介绍,及知识的总结整理,彻底明白jsthis函数该如何使用。this代码函数调用时,.1直接调
本文实例总结了JavaScript实现添加及删除事件的方法。分享给大家供大家参考。具体如下:JavaScript添加、删除事件的方法,也就是让某些方法生效指定次