《JavaScript高级程序设计》读书笔记(三)基本概念第五小节流程控制语句

内容
---语法
---数据类型 上一小节
---流程控制语句 本小节
---理解函数

语句
--ECMA-262规定了一组语句,也称流程控制语句

if语句
-- 条件可以是任意表达式,
-- ECMAScript会自动调用Boolean()转化结果为一个布尔值
-- 推荐始终使用代码块,即使只有一行代码

if(condition) { 
    statement1;
} else if () {
    statement2;
} else { 
    statement3;
}

 

do-while语句
--后测试循环语句
--在对条件表达式求值之前,循环体中的代码至少会被执行一次

do {
    statement;
} while (expression);

 


while 语句
--前测试循环语句
--在循环体代买执行之前,就会对出口条件求值

while(expression) {
    statement;
}

 


for 语句
--前侧循环语句
--具有,执行循环之前初始化变量和定义循环后要执行代码的能力

for(initialization; expression; post-loop-expression) {
    statement;
}

 

--for与while相同,while循环做不到的,for循环也做不到
--在for循环的变量初始化表达式中声明的变量,和在外部声明是一样的
--因为ECMACScript不存在块级作用域(es6的let声明 是块级,之前没有)
--因此在循环内部定义的变量外部也可以访问


for-in语句
--一种精准的迭代语句
--用来枚举对象的属性

for(property in expression) {
    statement;
}

举例

for(var propName in window) {
    console.log(propName);
}

--使用for-in循环了BOM中window对象的所有属性
--与for语句类似,var也不是必须的
--但是我们推荐使用局部变量
--ECMAScript对象的属性是没有顺序的,
--所以遍历的顺序是不可预测的
--如果要迭代的对象为null或者undefined,会抛出错误
--es5更改了这一行为,变成不执行循环体
--建议在for-in之前检查对象不是null或者undefined 为了兼容


label语句
--在代码中添加标签,以便将来使用

label:statement;

例如

start:for(var i=0;i<10;i++) {
    console.log(i);
}

--start标签可以由break或者continue语句引用

--加标签的语句一般都与for等循环语句配合使用


break和continue语句
--用于在循环中精准的控制代码的执行
--break语句会立即跳出循环,执行循环之后的代码
--continue会立即跳出本次循环,从循坏开始继续执行

var num = 0;
for(var i=1;i<10;i++) {
    if(i%5 == 0) {
        break;
    }
    num++;
}
num; //4

--当i=5时,num=4,i%5 ==0 成立跳出循环

--循环了5次,第五次提前跳出循环,没有执行num++

 

var num = 0;
for(var i=1;i<10;i++) {
    if(i%5 == 0) {
        continue;
    }
    num++;
}
num; //8

--当i=5时,num=4,i%5 ==0 成立跳出本次

--总共9次,i=5时,提前跳出本次循环,没有执行num++


--break和continue语句都可以和label语句联合使用,
--多发生在循环嵌套的情况下,break或者continue指定循环体

start:
for(let i=0;i<5;i++) {
    for(let j=0;j<5;j++) {
        if(j==3) {
            continue start;
            //break start;
        }
        console.log(i+"-"+j);
    }
}

 

--当条件成立跳出label指定循环结构
--continue start; j==3时,直接跳出本次并标出本层循环,从下一个i开始
--所以不会有j=4
--break start; j==3时,直接跳出这两层循环体
--所以不会有i=1 以及之后


with语句
--将代码的作用域设置到一个指定的对象中

with(expression) {
    statement;
}

--用于简化多次编写同一对象的工作

var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;

--上面的代码都包含location对象,用with可以

with(location) {
    var qs = search.substring(1);
    var hostName = hostname;
    var url = href;
}

 

--with语句关联了location对象,在with语句代码块中
--每个变量首先被认为是局部变量,如果在局部环境中找不到该变量的定义
--就会查询location对象中是否有同名属性,有,则以此为变量的值

--严格模式下不允许使用with语句,with语句会导致性能下降
--也给调试代码造成困难
--因此在开发大型应用程序时,不建议使用with


switch语句
--case 用于匹配值,并执行其中的语句(if)
--default 用于不匹配时,执行的语句(else)
--break用于跳出switch,
--不写则会在执行完当前case之后,不用判断继续执行下面的代码块中的代码
--ECMAScript中的switch 可以接受任何数据类型
--switch语句中的比较使用的是全等,所以 10 不等于 "10"

var a = "C"
switch(a) {
    case "A":
        console.log("this is A");
        break;
    case "B":
    case "C":
        console.log("this is B or C");
        break;
    default:
        console.log("other");
}

 

posted @ 2018-08-06 18:10  Luking  阅读(138)  评论(0编辑  收藏  举报