Javascript高级编程学习笔记(6)—— 流程控制语句
话不多说,我们直接开始进入今天的主题
流程控制语句
首先什么是流程控制语句呢?
顾名思义,就是控制流程的语句。
在JS中语句定义了ECMAScript中的主要语法,让我们可以使用一系列的关键字来完成指定任务。
语句也是构成一门编程语言旳基础,所以还是有必要记录一下的。
虽然有些语句不常用,但存在即合理 emm
if语句
在大多数编程语言中if语句,是最常用的语句
语法如下:
if(条件){
代码块1
}else{
代码块2
}
当代码块只有一行语句时可以不用添加花括号。
但是在实际使用过程中,最好都加上花括号以保证代码的可读性
其主要作用用于控制分支,以区分不同的情况。
在ES6中条件的小括号是一个单独的作用域,作用域这里不细说后面的文章会写到
do-while 语句
这是一种后测试循环语句,即在循环体结束后才进行条件测试,与for、while不同的地方在于do-while中的代码至少会被执行一次
语法如下:
do{
代码块
}while(条件)
while 语句
跟do-while不同,while是一种前测试语句;
即在循环之前就会对条件表达式求值,如果不满足条件就不会执行循环;
所以while循环中的代码不一定会执行(如果不满足初始条件的话)
语法如下:
while(条件){
代码块
}
for 语句
for也是一种前测试循环语句,但是for具有循环前初始化变量、定义循环后执行代码的能力
语法如下:
for(初始化;条件表达式;循环执行代码){
代码块
}
需要注意的是,for循环只是将变量初始化等与循环有关的语句集中在了一起
所以while做不到的for也做不到
并且在for中初始化变量,和在循环外部初始化变量没有什么区别,因为JS中不存在块级作用域(ES6以前)
除此而外,for中的三个表达式都是可选的,所以为for循环提供了极大的灵活性
for-in 语句
跟for不同,for-in是一种精准迭代语句,用于枚举对象属性
语法如下:
for(var name in obj){
代码块
}
每一次循环name都会是一个属性名
在循环体的代码块中可以通过obj[name],的方式获取对象中对应的值
需要注意:
1. ECMAScript对象的属性没有顺序,所以遍历的顺序不可预知
2.如果循环的对象是null或者undefined在老版本中会抛出错误
3.for-in循环只能遍历出对象上可遍历属性
label 语句
label可以为代码添加标签,以供break,continue跳转到指定位置
语法如下:
标签名:
代码块 for(var i = 0;;i++){
break 标签名;
}
多用于多层循环嵌套的情况,便于跳出循环到指定位置
break、continue语句
用于控制循环的精确执行
区别在于:
break会跳出整个循环
continue只会跳出当前这一次循环
这两个语句都可以和label配合使用
with 语句
这个语句大家可能不太常见
其作用是将代码作用域设定到指定对象下
目的是为了简化大量书写同一对象
语法如下:
with(对象){
代码块
}
代码块中的代码的作用域就是设置的对象
感觉还是比较好用的,这样就不用使用call来改变函数this指向了
with不常用当然是有原因的:
1.严格模式下不能使用
2.大量使用会导致性能下降,并且会给代码调试造成困难
switch语句
用于多分支的情况,避免使用一串的if-else
语法如下:
switch(表达式){
case 值1:
代码块1
break;
case 值2:
代码块2
break;
case 值3:
代码块3
break;
}
当表达式的值和case后的值相等时则会执行对应的代码块
需要注意的是:
ECMA中的switch的特殊之处在于,case的值不仅限于数值
甚至可以是对象,也不一定是常量可以是变量,甚至是表达式都可以
除此而外,switch不会进行类型转换,判断时使用的是全等操作符
PS:明天出差,可能会拖更,对期待更新的小伙伴说一声不好意思啦(虽然也没什么人期待更新 哭哭唧唧)
Javascript高级编程学习笔记(6)—— 流程控制语句的更多相关文章
- Javascript高级编程学习笔记(23)—— 函数表达式(1)递归
前面的文章中,我在介绍JS中引用类型的时候提过,JS中函数有两种定义方式 第一种是声明函数,即使用function关键字来声明 第二种就是使用函数表达式,将函数以表达式的形式赋值给一个变量,这个变量就 ...
- Javascript高级编程学习笔记(8)—— 变量
日常更新~~ 变量 所有的编程语言中,变量都是赋予语言灵活性的根本所在. 那么JS中的变量又有那些与众不同的地方呢.? 按照ECMA-262的定义,JS的变量和其他编程语言的变量有很大的区别 其松散类 ...
- Javascript高级编程学习笔记(3)—— JS中的数据类型(1)
前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...
- JavaScript高级编程学习笔记(第三章之一)
继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...
- Javascript高级编程学习笔记(98)—— WebGL(4) WebGL上下文(2)
错误 Javascript与WebGL之间的一个最大区别在于,WebGL的操作一般不会抛出错误 如果希望获取WebGL的错误信息,那么就需要手动调用 gl.getError() 方法 该方法会返回以 ...
- Javascript高级编程学习笔记(97)—— WebGL(3) WebGL上下文(1)
WebGL上下文 在支持WebGL的浏览器中,WebGL的名字为 "experimental-webgl",这是由于 webgl 的规范仍未制定完成 制定完成后名字就会改为简单的 ...
- Javascript高级编程学习笔记(96)—— WebGL(2) 类型化视图
类型化视图 类型化视图一般也被认为是一种类型化数组. 因为其元素必须是某种特定的数据类型,类型化视图都继承自 Dataview Int8Array: 表示8位二补整数(即二进制补数) Uint8Arr ...
- Javascript高级编程学习笔记(1)—— JS简介
此系列文章,用于记录所学,如有错误欢迎指出. Javascript组成 1.核心(ECMAScript) 2.文档对象模型(DOM) 3.浏览器对象模型(BOM) 1.核心(ECMAScript) E ...
- Javascript高级编程学习笔记(57)—— 事件(1)事件流
事件 JS与HTML的交互是通过事件实现的 而事件指的就是:文档或浏览器窗口特定的交互瞬间 可以通过侦听器来预定事件,以便在事件发生时执行相应的代码 这种模式也是设计模式中的观察者模式 事件流 有了事 ...
随机推荐
- CentOS 7 无法yum安装解决方法
1)下载repo文件 wget http://mirrors.aliyun.com/repo/Centos-7.repo 2)备份并替换系统的repo文件 .repo /etc/yum.repos.d ...
- xml实现登录表单验证
定义: XML(eXtended Markup Language,可扩展标记语言)提供了一套跨平台.跨网络.跨程序的语言的数据描述方式,使用XML可以方便地实现数据交换.系统配置.内容管理等常见功能. ...
- Garbage Disposal(模拟垃圾装垃圾口袋)
Garbage Disposal Description Enough is enough. Too many times it happened that Vasya forgot to dispo ...
- vs2015单步调试问题(附加进程)
如果页面有Codebehind的页属,那么前端通过ajax提交到后端代码,无法在后端代码中取到值. 这是一个vs属性标记,用于跟踪管理项目.如果后端代码的自定义指定(Inherits)的话,应该取掉 ...
- python学习Day1 计算机原理编程思维
一.学习思想:3W+1H 学什么(what).为什么学(why).用在哪里(where).怎么用(how) 学习编程语言重在代码量.代码量.代码量! 二.计算机五大组成部分,三大核心: 五大组成部 ...
- Cocos2dx开发之屏幕适配
由于各种智能手机的屏幕大小都不一致,会出现同一张图片资源在不同的设备分辨率下显示不一样的问题.为避免这样的情况,需要Cocos引擎能提供多分辨率的支持,也就是说要求实现这样的效果 — 开发者不需要考虑 ...
- 【你的职业规划】web前端的职业发展方向及学习攻略【转载】
web前端的职业发展方向有哪些?本文献给正在迷茫中,准备入坑web前端的初学者以及知海匠库web前端培训班的准前端工程师们: 一.职业方向定位 首先,只有确定好自己的职业方向,才能做好职业规划.在 ...
- BZOJ4377 Kurs szybkiego czytania \ Luogu 3589[POI2015]KUR - 数学思维题
Solution 我又双叒叕去看题解啦$QAQ$, 真的想不到鸭 输入 $a$ 和 $n$ 互质, 所以满足 $a \times i \ mod \ n$ $(0<=i<n)$ 肯定是不重 ...
- C++ 提取网页内容系列之一
标 题: C++ 提取网页内容系列作 者: itdef链 接: http://www.cnblogs.com/itdef/p/4171179.html 欢迎转帖 请保持文本完整并注明出处 首先分析网页 ...
- linux安装mysql和httpd
1.安装前检查是否已经安装[root@localhost1 ~]# rpm -qa |grep mysql 2.安装wget包:[root@localhost1 ~]# yum -y install ...