《JavaScript高级程序设计》学习笔记(第三章)- 下
2014-11-15 12:48
337 查看
语句
ECMAScript中的语句与其它语言的语句使用方法是一致的。只是有一个需要注意的问题是,ECMAScript中不存在块级作用域,所以在代码块中定义的局部变量,在外部也可以访问到。if语句
语法格式:if(condition) statement1 else statement2
为了防止不必要的错误,最好将
statement放到大括号中,使其成为代码块,即使只有一条语句也要使用大括号。
do-while语句
语法格式:do { statement } while (expression);
do-while循环里面的语句至少会被执行一次。
while语句
语法格式:while(expression) statemet
因为
while循环是在执行循环体前进行判断测试,所以有可能循环体内的代码一次也没有执行到。
for语句
语法格式:for (initialization; expression; post-loop-expression) statement
for语句相当于将
while循环有关的代码集中到了一个位置,两种循环没有本质上的区别。使用
while循环做不到的,使用
for循环同样也做不到。
for循环是三种循环中最灵活,也是最常用的。
for-in语句
语法格式:for (property in expression) statement
for-in语句一般可以用来枚举对象的属性。ECMAScript的对象属性没有顺序,因此
for-in输出的属性名顺序是不可预测的。
label语句
label语句主要用来与
break或
continue配合使用。
break和continue语句
break语句主要用于完全跳出循环体,强制继续执行循环后面的语句。而
continue则用于跳过本次循环的执行,会回到循环的顶部继续执行。
同时这两个语句都能配合
label语句使用,但是由于加过多的标签会让程序的执行顺序变得混乱,所以最好避免使用这种方法。
with语句
with语句在其它语言中并没有,这个语句的作用是将代码的作用域设置到一个特定的对象中。
语法格式:
with (expression) statement;
因为大量使用
with语句会导致性能下降,同时也会给调试代码造成困难,因此在开发大型应用的时候,不建议使用
with语句。
siwtch语句
语法格式:switch (expression) { case value: statement break; case value: statement break; case value: statement break; case value: statement break; default: statement }
这个语句主要用在多重选择中,避免使用大量的
if-else语句。
ECMAScript中的
switch选择语句可以使用任何数据类型,而不止是数值类型。同时,每个
case的值不一定是常量,也可以是变量,甚至是表达式。
switch语句在比较值时用的是全等操作符,因此不会发生类型转换。
函数
基本语法:function functionName(arg0, arg1,...,argN) { statements }
在ECMAScript中的函数不需要指定是否需要返回值,任何函数在任何时候都可以通过
reture语句后跟要返回的值来实现返回值。如果
return后不跟返回值,或者根本没有指定
return语句,则系统会自动返回
undefined。
理解参数
ECMAScript中没有函数签名的概念,函数不管传递进来几个参数,也不在乎每个参数的数据类型。也就是说,即使你定义的函数只接收两个参数,在调用的时候也可以传递任意个参数进来,解析器也不会报错。事实上,ECMAScript中的参数在内部是用一个数组来表示的,可以在函数在使用
arguments来获得传进来的参数。
arguments与数组类似,可以使用下标来取得特定的元素,也能通过
length来获得参数的个数。
因此,ECMAScript的参数实际上是相当灵活的,类似于C语言中的变长参数。同时,没有传递值的命名参数将被赋值为
undefined,这与定义了变量但又没有初始化是一样的。
没有重载
根据上面讲的原理,因为ECMAScript中根本没有函数签名的概念,因为也就无法实现函数的重载。如果定义了两个名字相同的函数,则该名字只属于后定义的函数,相当于前面的函数定义被后面的函数覆盖掉了。我们可以通过检查传入函数中的参数的类型和数量并作出不同的反应来模仿函数的重载。
小结
第三章讲解了ECMAScript中的核心语言特性,因此内容比较多。其实,ECMAScript中的大多数语法都是借鉴自其它类C语言,因此使用方法也是大同小异。但是其中也有一些跟其它语言不同的特性,特别是各种类型的转换,以及操作符用于非数值类型的运算时会有比较大的差异,需要特别注意一下。相关文章推荐
- 《汇编语言》学习笔记 第三章 寄存器(内存访问)
- 《es6标准入门》学习笔记-第三章 变量的解构赋值
- 《Java 学习笔记》 第三章阅读体验
- 《C++ Primer》学习笔记——第三章C++数据类型
- 《android编程权威指南》学习笔记之第三章 日志跟踪理解Activity生命周期
- 《OpenGL超级宝典4》学习笔记——第三章(一)
- 《Win32多线程程序设计》学习笔记 第三章 快跑与等待
- 《Android面试宝典》学习笔记(第三章:组件)
- 《自顶向下法》学习笔记——第三章:运输层
- 《c++ templates》学习笔记(2)——第三章
- 《OpenGL超级宝典4》学习笔记——第三章(二)
- 《c++ primer》学习笔记 第三章 标准库类型(string, vector,bitset)
- 《Android进阶之光》学习笔记——第三章 View体系与自定义View
- 《metasploit渗透测试魔鬼训练营》学习笔记第三章----情报搜集
- 《Oracle Database 11g SQL 开发指南》学习笔记——第三章_使用SQL*PLUS
- 《Mongodb权威指南》学习笔记 第三章 创建、更新及删除文档(一)
- LuceneInAction(第2版)学习笔记——第三章 为应用程序添加搜索功能
- 《μCOS-III源码分析笔记》学习笔记|2|第三章时间管理
- 《Mongodb权威指南》学习笔记 第三章 创建、更新及删除文档(二)
- 《计算机系统要素》学习笔记:第三章时序逻辑