9月阅读周·JavaScript权威指南:语句,表达式、复合、空语句篇
背景
去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。
没有计划的阅读,收效甚微。
新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。
这个“玩法”虽然常见且板正,但是有效,已经坚持阅读八个月。
已读完书籍:《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScript(中卷)》、《你不知道的JavaScript(下卷)》、《数据结构与算法JavaScript描述》、《WebKit技术内幕》、《前端架构:从入门到微前端》、《秒懂算法:用常识解读数据结构与算法》。
当前阅读周书籍:《JavaScript权威指南》。
表达式语句
具有副作用的表达式是JavaScript中最简单的语句。赋值语句是一类比较重要的表达式语句,例如:
greeting="Hello"+name;
i*=3;
递增运算符(++)和递减运算符(--)和赋值语句有关。它们的作用是改变一个变量的值,就像执行一条赋值语句一样:
counter++;
delete运算符的重要作用是删除一个对象的属性,所以,它一般作为语句使用,而不是作为复杂表达式的一部分:
delete o.x;
函数调用是表达式语句的另一个大类,例如:
alert(greeting);
window.close();
虽然这些客户端函数调用都是表达式,但它们都对Web浏览器造成了一些影响,所以我们认为它们也是语句。调用一个没有任何副作用的函数是没有意义的,除非它是复杂表达式或赋值语句的一部分,例如,不可能计算了一个余弦值随即把它丢弃:
Math.cos(x);
相反,得出了余弦值就得把它赋值给一个变量,以便将来才能使用这个值:
cx=Math.cos(x);
复合语句和空语句
可以用逗号运算符(见4.13.5节)将几个表达式连接在一起,形成一个表达式,同样,JavaScript中还可以将多条语句联合在一起,形成一条复合语句(compound statement)。只须用花括号将多条语句括起来即可。因此,下面几行代码就可以当成一条单独的语句,使用在JavaScript中任何希望使用一条语句的地方:
{
x=Math.PI;
cx=Math.cos(x);
console.log("cos(π)="+cx);
}
关于语句块有几点需要注意,第一,语句块的结尾不需要分号。块中的原始语句必须以分号结束,但语句块不需要。第二,语句块中的行都有缩进,这不是必需的,但整齐的缩进能让代码可读性更强,更容易理解。最后,需要注意,JavaScript中没有块级作用域,在语句块中声明的变量并不是语句块私有的。
将多条语句合并成一个大语句块的做法在JavaScript编程中非常常见。类似表达式通常包含子表达式一样,很多JavaScript语句包含其他子语句。从形式上讲,JavaScript语法通常允许一个语句块只包含一条子语句。例如,while循环的循环体就可以只包含一条语句。使用语句块,可以将任意数量的语句放到这个块中,这个语句块可以作为一条语句使用。
在JavaScript中,当希望多条语句被当做一条语句使用时,使用复合语句来替代。空语句(empty statement)则恰好相反,它允许包含0条语句的语句。空语句如下所示:
;
JavaScript解释器执行空语句时它显然不会执行任何动作。但实践证明,当创建一个具有空循环体的循环时,空语句有时是很有用的。例如下面的for循环(for循环详见5.5.3节):
//初始化一个数组a
for(i=0;i<a.length;a[i++]=0);
而在这个循环中,所有的操作都在表达式a[i++]=0中完成,这里并不需要任何循环体。然而JavaScript需要循环体中至少包含一条语句,因此,这里只使用了一个单独的分号来表示一条空语句。
注意,在for循环、while循环或if语句的右圆括号后的分号很不起眼,这很可能造成一些致命bug,而这些bug很难定位到。例如,下面的代码的执行结果可能就不是程序作者想要的效果:
if((a==0)||(b==0));//糟糕!这一行代码什么都没做...
o=null;//这一行代码总是会执行
如果有特殊的目的需要使用空语句,最好在代码中添加注释,这样可以更清楚地说明这条空语句是有用的,例如:
for(i=0;i<a.length;a[i++]=0)/*empty*/;
总结
表达式在JavaScript中是短语,那么语句(statement)就是JavaScript整句或命令。正如英文是用句号作结尾来分隔语句,JavaScript语句是以分号结束。表达式计算出一个值,但语句用来执行以使某件事发生。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)