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

语句
--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. SQL Server经典sql语句大全(转)

    一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...

  2. 2019-08-05 纪中NOIP模拟B组

    T1 [JZOJ1432] 输油管道 题目描述 请你帮忙设计一个从城市M到城市Z的输油管道,现在已经把整个区域划分为R行C列,每个单元格可能是空的也可能是以下7种基本管道之一: 油从城市M流向Z,‘+ ...

  3. jvm(2):垃圾收集和内存分配

    typora-root-url: ./ 垃圾收集 垃圾收集器关注的是线程共享的这部分内存. jvisualvm用来监控JVM的运行情况,可以用它来查看和浏览Heap Dump.Thread Dump. ...

  4. 为什么各家银行都抢着办理ETC业务?

    最近据于各家银行抢着办ETC业务的话题很火,各家银行不仅有很大的折扣力度,而且又是送油卡又是送现金的,银行为什么会如此乐此不疲?为了让车主办理自家的ETC业务,银行究竟有多卖力? 就在近日,网上疯传一 ...

  5. 【外文阅读】Web Development in 2020: What Coding Tools You Should Learn---Quincy Larson

    原文链接:https://mail.qq.com/cgi-bin/readtemplate?t=safety&check=false&gourl=https%3A%2F%2Fwww.f ...

  6. JS高级---把局部变量变成全局变量

    如何把局部变量变成全局变量? 把局部变量给window就可以了     函数的自调用---自调用函数 一次性的函数--声明的同时, 直接调用了 (function () { console.log(& ...

  7. 如何开通linux机器的对外访问端口

    1.先查看是否已经开通 2.没有开通,去linux机器查看防火墙,确实没有开通 3.修改防火墙 vim /etc/sysconfig/iptables 4.重启防火墙之后重新查看已经可以看到8000端 ...

  8. 线性递推BM模板

    #include <cstdio> #include<iostream> #include <cstring> #include <cmath> #in ...

  9. Caffe 笔记 (一)caffe的层与数据结构

    Caffe是纯粹的C++/CUDA架构,支持命令行.Python和MATLAB接口:可以在CPU和GPU直接无缝切换: Caffe::set_mode(Caffe::GPU); Caffe的优势 1. ...

  10. CGMH:Constrained Sentence Generation by Metropolis-Hastings Sampling解读

    根据关键字生成句子: 读进关键字,随机选择处理手段(增删改)以及待处理word的位置,然后计算接受/拒绝概率,根据概率生成一个新的序列,再循环这一过程,循环次数是500,每次都将困惑度最低的生成句子放 ...