程序就像水一样流动,代码默认会一行一行的向下执行,但是遇到一些特殊的关键字,会改变它的流向,由这些关键字规定的能改变程序流向的语句,叫做流程控制语句。
JS中的流程控制语句有:条件语句、循环语句、跳转语句、标记语句、异常处理语句、调试语句、严格模式语句。
条件语句
if...else:根据条件执行不同的代码块switch:在多个选项之间进行选择执行
循环语句
while:在条件为真的情况下重复执行一段代码块do...while:先执行一次循环体,然后再检查循环条件是否满足,只要条件满足,就会一直执行循环体,直到条件不再满足为止for:创建一个循环,它包含了三个可选的表达式,这三个表达式被包围在圆括号之中,使用分号分隔,后跟一个用于在循环中执行的语句for...of:遍历可迭代对象(Array,Map,Set,String,TypedArray,arguments 等等)中的元素for await...of:遍历异步迭代器返回的值for...in:遍历对象属性
跳转语句
break:终止当前循环、switch语句或label 语句,并接着执行被中止语句之后的语句continue:跳过当前循环中的某个迭代,直接进入下一个迭代return:终止函数的执行,并返回一个指定的值给函数调用者,如果没有指定值,则返回undefined
标记语句
label:在一条语句前面加个可以引用的标识符,可以和 break 或 continue 语句一起使用,通常用于在嵌套循环中跳出多层循环
outerloop:
for (var i = 0; i < 5; i++) {
innerloop:
for (var j = 0; j < 5; j++) {
if (i * j > 6) {
break outerloop;
}
console.log(i, j);
}
}
// outerloop和innerloop都是label语句,它们分别标记了外层循环和内层循环
// 当i * j大于6时,使用break语句跳出了outerloop标记的循环
异常处理语句
throw:用来抛出一个用户自定义的异常,当前函数的执行将被停止,throw 之后的语句将不会执行,并把控制权交给调用该代码的上层代码。通常throw语句会与try...catch语句一起使用,以便在出现错误时能够捕获并处理错误,这种情况下控制权将被传递到第一个 catch 块,如果调用者函数中没有 catch 块,程序将会终止try-catch:标记要尝试的语句块,并指定一个出现异常时抛出的响应
try语句包含了由一个或者多个语句组成的try块,和至少一个catch块或者一个finally块的其中一个,或者两个兼有,下面是三种形式的try声明:
- try...catch
- try...finally
- try...catch...finally
try {
// 可能会抛出异常的代码块
} catch (error) {
// 处理异常的代码块
} finally {
// 在try-catch语句执行完毕后必定会执行的代码块
}
调试语句
debugger:当代码执行到debugger语句时,程序会暂停执行,等待开发者在调试器中逐行调试代码
严格模式语句
"use strict";:为整个脚本或在个别函数中定义严格模式
总结
JS是一门编程语言,其核心是处理数据,如何优雅、高效的处理数据应该是每个JS程序员追求的目标。
所以,笔者认为的好代码应该具备这些条件:清晰的数据表达、准确的数据运算、简洁的数据流程、稳定的数据存储。
其中,最能体现优雅的,我认为是简洁的数据流程,熟练掌握这块的知识,势必能让我们的代码更优雅。