JavaScript权威指南(第6版) --- 自学笔记(3)--- JS可选的分号

JS可选的分号

js使用分号(;)将语句分隔开,来增加代码的可读性和整洁性。
在js中,如果语句独自占一行,通常可以省略(;),但是不建议省略,带有分号的代码可读性要好很多。

下面示例用来说明,什么情况下分号必须,什么情况下分号可以省略。
1. a = 3;
    b = 4;  // 两条语句各自占一行,此时两条语句后的分号可以省略。
2. a = 3; b =4;  // 两条语句在一行书写,所以第一个分号不能省略,第二个分号则可以省略

我们来看下面这段代码:

var a
a
=
3
console.log("a的结果是:" + a)      // a的结果是:3
这段代码非常不规范,很垃圾的代码,所以初学者一定要养成编码规范。
为什么?

我们来解释一下上面代码发生了什么:
js并不是在所有换行处都填补分号,只有在缺少分号就代码无法正确解析的时候,js才会填补分号。
换句话说,如果当前语句和随后的非空格字符不能当成一个整体来解析的话,js就在当前语句行结束处填补分号。

上面的代码最终会被js解析为:
var a; a = 3; console.log("a的结果是:" + a);

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

例如:
var x = 1, a = 2, b = 3, f = 4
var y = x + f
(a + b).toString() 
console.log("y的结果是:" + y);
直接运行上面代码:会抛出 Uncaught ReferenceError: f is not defined 错误。

我们定义一个f函数
function f(val) {
    return val;
}
重新运行:y的结果是:15 (可以想到,y最终等于 x的值作为字符串,与 (a+b).toString()的字符串进行了拼接)
显然:
var y = x + f
(a + b).toString() 
被js解析为:
var y = x + f(a + b).toString() ;
这显然并不是我们代码的本意。

有些程序员,喜欢保守的在每一行语句前加上分号,例如:

 var x = 1, a = 2, b = 3, f = 4
; var y = x + f
; (a + b).toString() 
; console.log("y的结果是:" + y);     // y的结果是:5
开发人员应该按照团队的编码规范,来指导自己的编码风格。

一般情况下,当前语句和下一行语句无法合并解析的时候,js则会在第一行后填补分号,但是有两个例外:
(1)涉及到return、break、continue语句,如果这三个关键字后紧跟换行,js则会在换行处添加分号。

function changeTrue() {
    return 
    true;
}
var bool = false;
bool = changeTrue();
console.log("bool的结果是:" + bool);    // bool的结果是:undefined
此处结果并不是我们本意想得到的结果:true
changeTrue() 最终会被解析为: return; true;

(二)涉及"++"或"--"运算符的时候,这些运算符可以作为表达式前缀,或者后缀。如果作为后缀,它和表达式应当在同一行,否则,行尾会填补分号。

var x = 1, y = 1;
x
++
y
console.log("x的结果是:" + x);    // x的结果是:1
console.log("y的结果是:" + y);    // y的结果是:2
可以看出上面代码被js解析为:
x; ++y; 而并非我们本意 x++; y;

所以呢?还是那句话:
编码规范性特别重要,尤其初学者,一定要养成良好的编码规范性。 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值