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

语句
--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; //

--当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; //

--当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");
}

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

  1. 《javascript高级程序设计》笔记三

    第三章 基本概念 任何语言的核心必然会描述这门语言最基本的工作原理.这部分内容对我们来说,读起来很乏味,甚至会产生困意,但这部分内容却是重要的!我有幸拜读<JavaScript高级程序设计> ...

  2. javascript高级程序设计读书笔记-事件(一)

    读书笔记,写的很乱   事件处理程序   事件处理程序分为三种: 1.html事件2. DOM0级,3,DOM2级别  没有DOM1 同样的事件 DOM0会顶掉html事件   因为他们都是属性  而 ...

  3. Javascript高级程序设计读书笔记(第三章)

    第3章 基本概念 3.4 数据类型 5种简单数据类型:undefined.boolean.number.null.string. typeof操作符,能返回下列某个字符串:“undefined”.“b ...

  4. 《JavaScript高级程序设计》笔记:基本概念(三)

    数据类型 ECMAScript中有5种简单数据类型(也称为基本数据类型):undefined,null,boolean,number和string. typeof typeof null会返回“obj ...

  5. javascript高级程序设计读书笔记

    第2章  在html中使用javascript 一般都会把js引用文件放在</body>前面,而不是放在<head>里, 目的是最后读取js文件以提高网页载入速度. 引用js文 ...

  6. JavaScript高级程序设计 读书笔记

    第一章 JavaScript 简介 第二章 Html中使用JavaScript 第三章 基本概念 第四章 变量,作用域,内存 第五章 引用类型 第六章 面向对象 第七章 函数表达式 第八章 BOM 第 ...

  7. JavaScript高级程序设计-读书笔记(6)

    第20章 JSON JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量 JSON的语法可以表示一下三种类型的值 l        简单值:使用与JavaScript相同的语法,可以在JS ...

  8. JavaScript高级程序设计-读书笔记(1)

    第1章 JavaScript简介 JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成: l        ECMAScript:提供核心语言功能: l        文 ...

  9. javascript高级程序设计 读书笔记1

    第二章  在HTML中使用JS 加载JS有三种:行内,head头部和外部链接JS   最好使用外部链接<script src="example.js" ></sc ...

随机推荐

  1. 解决VS2013报错fopen、sprintf等函数安全的问题

    VS2013中使用fopen.sprintf等函数是会出现安全问题: error C4996: 'fopen': This function or variable may be unsafe. Co ...

  2. 如何删除github中的repository

    打开个人界面->点击进入想删除的repository的界面->拉到最下面的danger zone->delete

  3. JS中使用lambda筛选list

    LevelEnum.filter(x=>x.Category=="水利工程")

  4. MarkDown的黄金搭档Typora编辑器

    让你成为热爱写作的程序员 学习编程的小伙伴,要养成记笔记的好习惯,并发布到博客上去与同行分享你的学习经验,那么传统的文本编辑器或多或少会不尽人意,效率低,而且码字体验与写代码完全不一样. 下面推荐一款 ...

  5. 2019牛客多校第一场E ABBA dp

    ABBA dp 题意 给出2(N+M)个AB字符,问能构造出N个AB子序列和M个BA子序列组成的2*(n+m)的序列种类有多少 思路 碰到计数构造类的题目,首先要去找到判断合法性的条件,即什么情况下合 ...

  6. awk从放弃到入门(2):awk分隔符

    一.awk分隔符 awk的默认分割符是空格,但是,这样描述并不精确,因为,awk的分隔符还分为两种,"输入分隔符" 和 "输出分隔符" . (1)输入分隔符:英 ...

  7. 在电竞圈想摧枯拉朽的AI,到底能带来什么?

    2019ChinaJoy,似乎并没有让这个暑期彻底燃动起来.在业界和玩家看来,2019ChinaJoy亮点匮乏.饱受诟病.不过细心观察的话,能够发现一个特殊现象--AI取代此前猎艳性质的cosplay ...

  8. 启动docker报Failed to start Docker Application Container Engine.解决

    [root@docker ~]# systemctl status docker.service● docker.service - Docker Application Container Engi ...

  9. Lowest Common Multiple Plus 题解

    求n个数的最小公倍数. Input输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数. Output为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行.你可以假设最后的 ...

  10. IDEA 运行项目、模块的多个实例

    IDEA默认只能运行同一项目|模块的一个实例. 运行多个实例: 比如springcloud的端口设置: --server.port=9001 . 当然,也可以在项目的配置文件中修改参数. 命令行.ID ...