Javascript高级编程学习笔记(6)—— 流程控制语句

话不多说,我们直接开始进入今天的主题

流程控制语句

首先什么是流程控制语句呢?

顾名思义,就是控制流程的语句。

在JS中语句定义了ECMAScript中的主要语法,让我们可以使用一系列的关键字来完成指定任务。

语句也是构成一门编程语言旳基础,所以还是有必要记录一下的。

虽然有些语句不常用,但存在即合理 emm

if语句

在大多数编程语言中if语句,是最常用的语句

语法如下:

if(条件){
代码块1
}else{
代码块2
}

当代码块只有一行语句时可以不用添加花括号。

但是在实际使用过程中,最好都加上花括号以保证代码的可读性

其主要作用用于控制分支,以区分不同的情况。

在ES6中条件的小括号是一个单独的作用域,作用域这里不细说后面的文章会写到

do-while 语句

这是一种后测试循环语句,即在循环体结束后才进行条件测试,与for、while不同的地方在于do-while中的代码至少会被执行一次

语法如下:

do{
代码块
}while(条件)

while 语句

跟do-while不同,while是一种前测试语句;

即在循环之前就会对条件表达式求值,如果不满足条件就不会执行循环;

所以while循环中的代码不一定会执行(如果不满足初始条件的话)

语法如下:

while(条件){
代码块
}

for 语句

for也是一种前测试循环语句,但是for具有循环前初始化变量、定义循环后执行代码的能力

语法如下:

for(初始化;条件表达式;循环执行代码){
代码块
}

需要注意的是,for循环只是将变量初始化等与循环有关的语句集中在了一起

所以while做不到的for也做不到

并且在for中初始化变量,和在循环外部初始化变量没有什么区别,因为JS中不存在块级作用域(ES6以前)

除此而外,for中的三个表达式都是可选的,所以为for循环提供了极大的灵活性

for-in  语句

跟for不同,for-in是一种精准迭代语句,用于枚举对象属性

语法如下:

for(var name in obj){
代码块
}

每一次循环name都会是一个属性名

在循环体的代码块中可以通过obj[name],的方式获取对象中对应的值

需要注意:

1. ECMAScript对象的属性没有顺序,所以遍历的顺序不可预知

2.如果循环的对象是null或者undefined在老版本中会抛出错误

3.for-in循环只能遍历出对象上可遍历属性

label 语句

label可以为代码添加标签,以供break,continue跳转到指定位置

语法如下:

标签名:
代码块 for(var i = 0;;i++){
break 标签名;
}

多用于多层循环嵌套的情况,便于跳出循环到指定位置

break、continue语句

用于控制循环的精确执行

区别在于:

break会跳出整个循环

continue只会跳出当前这一次循环

这两个语句都可以和label配合使用

with 语句

这个语句大家可能不太常见

其作用是将代码作用域设定到指定对象下

目的是为了简化大量书写同一对象

语法如下:

with(对象){
代码块
}

代码块中的代码的作用域就是设置的对象

感觉还是比较好用的,这样就不用使用call来改变函数this指向了

with不常用当然是有原因的:

1.严格模式下不能使用

2.大量使用会导致性能下降,并且会给代码调试造成困难

switch语句

用于多分支的情况,避免使用一串的if-else

语法如下:

switch(表达式){
case 值1:
代码块1
break;
case 值2:
代码块2
break;
case 值3:
代码块3
break;
}

当表达式的值和case后的值相等时则会执行对应的代码块

需要注意的是:

ECMA中的switch的特殊之处在于,case的值不仅限于数值

甚至可以是对象,也不一定是常量可以是变量,甚至是表达式都可以

除此而外,switch不会进行类型转换,判断时使用的是全等操作符

PS:明天出差,可能会拖更,对期待更新的小伙伴说一声不好意思啦(虽然也没什么人期待更新 哭哭唧唧)

上一篇:Javascript高级编程学习笔记(61)—— 事件(5)UI事件


下一篇:Javascript高级编程学习笔记(96)—— WebGL(2) 类型化视图