# 流程语句
- 知识点一、[循环语句](#one)
- 知识点二、[跳转语句](#two)
- 知识点三、[选择语句](#three)
- 知识点四、[异常处理语句](#four)
- [面试题](#footer)
## 知识点一、循环语句:
- **while**
- 语法
while (条件表达式) {
//循环执行代码段
}
- 流程
- 1、判断条件表达式的值
- 2、当值为true时循环执行代码段
- 3、当值为false时退出循环体
- 特性
- 先检查条件,再执行循环体
- 条件不满足则循环一次也不执行
- 时机
- 一个动作被重复执行到满足某个条件时
- **do-while**
- 语法
do {
//代码执行主体
} while (条件表达式);
- 流程
- 1、先执行循环体内代码再进行判断
- 2、如果表达式的值为true,则重复执行代码段
- 3、如果表达式的值为false,则退出循环体
- 特性
- 先执行循环体,再进行条件判断
- 循环体内代码至少执行一次
- 时机
- 希望一个动作至少被执行依次时
- **for**
- 特性
- for(循环变量=初值;循环条件;递增/递减计数器){循环代码段};
for (var i = 0; i < array.length; i++) {
array[i]
//代码执行的主体
}
- 注意for循环length的优化;
- 流程
- 1、用循环变量初始值与循环条件相比较,确定返回值
- 2、如果返回值为true则执行循环体
- 3、执行完一次后进行递增/递减运算
- 4、将运算结果与循环条件相比较
- 5、如果返回值还是true则继续执行循环体;如果返回值为false则退出循环体;
- 时机
- 重复一个动作到一定次数时;
- for-in
- 语法
- for(声明变量in对象){代码段}
for (var variable in object) {
if (object.hasOwnProperty(variable)) {
//代码执行主体
}
}
- 作用:枚举对象属性
**注意事项**
- 1、循环输出的属性顺序不可预知
- 2、对象的值不能是null或者undefined;
**[↑ 返回目录](#zero)**
## 知识点二、跳转语句;
- return:终止函数体的运行,并返回一个值
- break:终止整个循环,不再进行判断
- continue:结束本次循环,接着去判断是否执行下次循环;
**[↑ 返回目录](#zero)**
## 知识点三、选择语句;
> 选择语句,有三个,if和switch、?:三目运算符
**if**
- 句法
if(条件表达式1){
代码段1
}else if(条件表达式2){
代码段2
}else{
代码段3
}
- 流程
- 1、判断条件1,如果返回值为true则执行代码段1
- 2、如果条件1的返回值为false,则跳过语句块1并检测条件2
- 3、如果所有表达式的值均为false则执行else后面的语句(else的这个语句为非必须的,可以不写)
- 特性
- 结果复杂可嵌套
- 可检测度哟个条件表达式
- 表达式的值具有线性特征
- 表达式的值的动态的
- 适用于任意类型的数据
- 可处理复杂的逻辑关系(代码的逼格低,多重判断可用swith case代替)
**switch**
- 句法
switch(条件表达式){
case 标签1:
代码段1
break;
……
Default: []()
代码段n;
}
- 流程
- 1、计算表达式的值,并与各标签相比较
- 2、若找到与之匹配的标签,则执行其后面的代码段
- 3、弱没有照东啊与之匹配的标签,则直接执行default之后的代码段(default是非必须的)
- 格式
- case标签为常量,可以是字符串或数字
- 每个标签均为冒号:结束
- 虽然break与default为可选项,但为了逻辑清晰最好不要省略
- case标签的值必须和条件表达式的值完全匹配
- 特性
- 结构简介,转为多重选择设计
- 仅可测试一条条件表达式
- 表达式的值具有离散型
- 表达式的值是固定的,不会动态变化的
- 仅能应用整数,枚举,字符串等类型数据
- 仅能处理多个枚举型逻辑关系
**[↑ 返回目录](#zero)**
## 知识点四、异常处理语句;
- throw:主动抛出异常
- try:指明需要处理的代码段
- catch:捕获异常
- finally:后期处理,无论出不出错都会执行;
**[↑ 返回目录](#zero)**
## 面试题:
- for循环和while循环的转化;
- return/continue/break的区别
- 说说写JavaScript的基本规范?书写规范;
- 变量的首字母不能是数字,其它字母可以是字母、数字、下划线
- 不能用关键字和保留字作为变量的名字;
- 使用驼峰命名法来书写变量后续需要用到的变量,可以先赋值为null;
- 使用匈牙利命名法来书写明确知道变量名字;让别人一眼看出什么变量类型;
- 借用变量的时候;变量最后不用时候置为null;
经典的总结:
1. 不要在同一行声明多个变量。
2. 请使用 ===/!==来比较true/false或者数值
3. 使用对象字面量替代new Array这种形式
4. 不要使用全局函数。
5. switch语句必须带有default分支
6. 函数不应该有时候有返回值,有时候没有返回值。
7. for循环必须使用大括号
8. if语句必须使用大括号
9. for-in循环中的变量 应该使用var关键字明确限定作用域,从而避免作用域污染。