一、流程控制语句

1、if语句的基本使用

1.if语句是最简单的条件语句,也称选择语句。它通常结合else一起使用,表示如果…就…否则…

if语句举例1:

用户输入一个数字,如果这个数字是偶数,则弹出对话框显示“偶数”,否则弹出对话框显示“奇数”。

var n = Number(prompt('请输入一个数字:'));if (n % 2 == 0) {alert(n+'是一个偶数');}else {alert(n+'是一个奇数');}

2.if语句执行流程图

3.if语句举例2

用户输入年龄,判断用户是否可以申领驾照。申领驾照的条件是年龄必须为18到70岁。

var age=Number(prompt('请输入年龄'));if(age>=18 && age<=70){alert('您的年龄符合标准,可以申领驾照');}else {alert('您的年龄不符合标准,不能申领驾照');}

4.else可以省略:在if语句中else可以省略。

5.看清楚哪些语句是if语句体中的语句。

6.单行if语句:如果if语句体中只有一行语句,可以省略大括号和换行。

2、if else if多条件分支

1.举例:用户输入考试成绩,根据下表输出用户的成绩档次。

分数 档次
85-100 优秀
70-84 良好
60-69 及格
0-59 不及格

必须注意“否则如果”:else if()条件分支“暗含”不符合之前所有条件,要深刻理解什么叫“否则如果”。

2.小案例:BMI肥胖指数计算

BMI指数(Body Mass Index,身体质量指数)是用体重(以公斤为单位)除以身高(以米为单位)的平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的标准。

BMI值 分档
低于18.5 过瘦
18.5-24(不含) 正常
24-28(不含) 过胖
28-32(不含) 肥胖
大于等于32 非常肥胖

3、if语句算法题

1.判断水仙花数
水仙花数是这样的一个3位数:它的每个数位的数字的立方和等于它本身。

2.游乐园门票计算

某游乐园的门票价格如下表所示。请用户输入年龄和星期几,弹出对话框显示门票价格。星期几用阿拉伯数字0、1、2、3、4、5、6表示,其中0表示周日。

年龄大于等于10岁 年龄小于10岁
平日 300 140
周末 500 210

需要if语句的嵌套:

4、switch语句

1.switch语句的用途:当一个变量被分类讨论的情形。

在switch()的圆括号中一般是一个变量名,这个变量将被分类讨论。

case表示“情况”,它后面没有圆括号,直接跟一个值。程序会依次将case后面的值与switch圆括号中的值进行全等比对,如果比对相同,则执行这条case冒号后面的语句。default表示默认情况。

多条case可以共用同一个语句体。

2.break非常重要
switch语句并不像if语句那样当执行了某一个分支之后会自动跳出if语句体,程序员必须主动调用break来跳出switch语句体。如果不书写break,则后面的所有case都将被视为匹配,直到遇见break。

3.例:要求用户输入一个1~12中的任意一个数字,显示这个月份的天数。

5、三元运算符(工作中非常常见)

1.Javascript中提供了一种叫做“三元运算”的语法形式,让我们可以方便地实现选择
条件表达式?表达式1 :表达式2

2.问号前面是判断的条件,问号后面用冒号隔开两个表达式。当条件表达式为真时调用表达式1,为假时调用表达式2。

3.三元运算符的用途:根据某个条件是否成立,在两个不同值中选择变量的值。

6、for循环语句

1.可以使用for循环语句简化程序

3.小练习:请使用for循环语句在控制台逐行输出18、14、10、6、2、-2、-6。

4.for循环算法题

计算1+2+3…+99+100的和。

请问1~100中哪个数字除以3余1,除以4余2,除以5余3?

7、while循环语句

1.while语句也是一种循环结构,是一种“不定范围”循环,和for循环各有不同的用武之地。

while语句事先不指定循环开始、结束的范围,只要测试条件满足,就一直执行循环体。

2.while循环注意事项

while循环没有显式定义循环变量,必须自己在while循环外先定义好循环变量,有时甚至可以没有循环变量。

循环体内的语句,必须使循环测试条件趋向不成立,否则会死循环

3.更适合while循环的场景:寻找不到条件时
寻找最小的满足n2>456789的整数n。

小兔子拔萝卜,第1天拔1个,第2天拔2个,第3天拔3个,以此类推。请问小兔子多少天能把500个萝卜拔光?(有“出一错误”)

8、break和continue

1.break表示立即终止循环,它只能用在循环语句中,在for循环和while循环中都可以使用。

2.break用在while语句中,通常和while(true){}搭配使用。

3.continue用于跳过循环中的一个迭代,并继续执行循环中的下一个迭代。for循环更经常使用continue。

9、do while循环

1.do while循环是一种“后测试循环语句”。它不同于for循环和while循环每次都是“先测试条件是否满足,然后执行循环体”,do-while循环是“先执行循环体,然后测试条件是否满足”。

2.do-while循环将循环执行条件写到了循环体的后面,这样一来,循环体一定会至少执行一次,然后再检测循环执行条件是否为true,决定是否继续执行循环体。

3.请编写程序,随机生成两个变量dx和dy,它们均在[-4,4]区间随机取值,但要求dx和dy不能同时为0。(随机数)

4.while语句算法题

猜数字小游戏:随机生成一个2到99的数字,让用户猜测这个数字是几,用户输入自己的猜测之后,提示“输入的数字太大了”或“输入的数字太小了”,不断重复这个过程,直到用户准确猜到这个数字。

10、随机数函数

1.先学习随机数函数。得到o到1之间的小数:Math.random()。

2.得到[a, b]区间的整数,公式:
parseInt (Math.random() *(b - a + 1)) + a

11、算法

1.算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。

2.算法就是把一个问题,拆解为计算机能够一步一步执行的步骤。

3.计算机的流程控制语句:顺序执行、选择语句、循环语句。

4.优秀算法的要求:正确性,健壮性,可读性。

5.伪代码

计算1+2+3+…+99+100的和:

(1)定义变量sum;(2)从1到100遍历数字,用i表示;把每个数字i加到sum中;(3)打印显示sum。

12、累加器和累乘器

1.由用户输入数字n,请计算下面算式的值

2.由用户输入数字n,请计算n的阶乘。

3.同时用到累加器和累乘器的题目

13、穷举法

1.穷举法,顾名思义,是指根据题目的条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况符合题目的条件,则为本问题的一个解;若全部情况验证后都不符合题目的条件,则本题无解。

2.例:编程寻找100以内的既能被3整除,也能被5整除的数字。

3.例:用户输入一个数字,在控制台显示这个数字的全部约数。

4.寻找全部的水仙花数。水仙花数是这样的一个3位数:它的每个数位的数字的立方和等于它本身。

14、综合算法题目

1.循环的嵌套

2.请寻找1~100的所有质数

3.有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何

15、课程重点

1.JavaScript中的流程控制语句有哪些?

2.if多分支语句的执行机理;for循环的执行机理

3.for和while循环各有什么使用场景?

16、课程难点

1.累加器和累乘器、穷举法算法思想

2.各种算法题目

3.把这节课所学化作“内功”,融会贯通到后面的课程中

二、数组

1、数组简介和定义

1.数组(Array),顾名思义,用来存储一组相关的值,从而方便进行求和、计算平均数、逐项遍历等操作。

2.数组的定义方法1:定义一个数组非常的简单,只需要使用方括号[]即可。
var arr =[ ‘A’,‘B’, ‘c’, ‘D’];

数组的定义方法2:定义数组还可以这样:
var arr = new Array ( ‘A’, 'B ','C ',‘D’);

数组的定义方法3:下面的代码表示定义一个长度为4的数组,但是这4项都是undefined。
var arr =new Array(4);

3.访问数组项:

数组每一项都有下标,下标从0开始。

可以使用方括号中书写下标的形式,访问数组的任一项。

4.下标越界:
JavaScript规定,访问数组中不存在的项会返回undefined,不会报错。

5.数组的长度:
数组的length属性表示它的长度。数组最后一项的下标是数组的长度减1。

6.更改数组项:数组并不是只读的,我们可以修改它其中任何项的值。
如果更改的数组项超过了length-1,则会创造这项。

 var arr=['i','m','o','o','c'];arr[2]=arr[2].toUpperCase();arr[6]='A';console.log(arr);//(7)['i','m','O','o','c',empty,'A']

7.数组的遍历:数组的最大的优点就是方便遍历。

for(var i=0;i<arr.length;i++){console.log(arr[i]);}
//(7) ["i", "m", "O", "o", "c", empty, "A"]

若是在数组中间输入几个逗号,则输出时会显示undefined。

2、数组类型的检测

1.数组用typeof检测结果是object。

2.Array .isArray()方法可以用来检测数组。

3、数组的常用方法

1.数组的头尾操作

方法 功能
push() 在尾部插入新项
pop() 在尾部删除
unshift() 在头部插入新项
shift() 在头部删除

(1)push()方法用来在数组末尾推入新项,参数就是要推入的项。

如果要推入多项,可以用逗号隔开。

调用push()方法后,数组会立即改变,不需要赋值。

(2)与push()相反,pop()方法用来删除数组中的最后一项。
pop()方法不仅会删除数组末项,而且会返回被删除的项。

(3)unshift(()方法用来在数组头尾插入新项,参数就是要插入的项。

如果要插入多项,可以用逗号隔开。调用unshift()方法后,数组会立即改变,不需要赋值。

(4)unshift()相反,shift()方法用来删除数组中下标为0的项。

shift()方法不仅会删除数组首项,而且会返回被删除的项。

2.splice()方法
(1)splice()方法用于替换数组中的指定项。

var arr=[0,1,2,3,4,5];
arr.splice(3,2,66,77,88,99);
//表示从下标为3的数组开始,连续选择2项,用后面的参数替换掉这2项
//(8) [0, 1, 2, 66, 77, 88, 99, 5]

(2)splice()方法可以用于在指定位置插入新项。

var arr=[0,1,2,3,4,5];
arr.splice(2,0,44,55,66,77);
//从下标为2的数组开始,不替换数组中的数,插入后面的4项
//(10) [0, 1, 44, 55, 66, 77, 2, 3, 4, 5]

(3)splice()方法可以用于删除指定项。

var arr=['苹果','鸭梨','西瓜','水蜜桃'];
arr.splice(2,1);
//从下标为2的数组开始,删除1个项
//["苹果", "鸭梨", "水蜜桃"]

(4)splice()方法会以数组形式返回被删除的项

var arr=[0,1,2,3,4,5];
items=arr.splice(3,2,66,77,88,99);
console.log(arr);
console.log(items);
//(8) [0, 1, 2, 66, 77, 88, 99, 5]
//(2) [3, 4]

3.slice()方法

slice()方法用于得到子数组,类似于字符串的slice()方法。

slice(a,b)截取的子数组从下标为a的项开始,到下标为b (但不包括下标为b的项)结束。
slice(a,b)方法不会更改原有数组。

slice()如果不提供第二个参数,则表示从指定项开始,提取所有后续所有项作为子数组。

slice()方法的参数允许为负数,表示数组的倒数第几项

var arr=['A','B','C','D','E','F'];
var child_arr1=arr.slice(2,5);
//(3) ["C", "D", "E"]

4.join()和split()方法:
数组的join()方法可以使数组转为字符串;字符串的split()方法可以使字符串转为数组。

join()的参数表示以什么字符作为连接符,如果留空则默认以逗号分隔,如同调用toString()方法;split()的参数表示以什么字符拆分字符串,一般不能留空。

5.字符串和数组更多相关性
字符串也可以使用方括号内写下标的形式,访问某个字符等价于charAt()方法。

字符串的一些算法问题有时候会转换为数组解决

6.concat()方法
concat()方法可以合并连结多个数组。concat()方法不会改变原数组。

7.reverse()方法(只有数组才能调用)

reverse()方法用来将一个数组中的全部项顺序置反。

arr.reverse();

8.indexOf()和includes()方法(使用全等来判断)
indexOf()方法的功能是搜索数组中的元素,并返回它所在的位置,如果元素不存在,则返回-1。
includes()方法的功能是判断一个数组是否包含一个指定的值,返回布尔值。

['A','B','C','D','E'].indexOf('C')
//2['A','B','C','D','E'].includes('D')
//true

9.有关数组排序:数组有sort()方法可以用于数组排序。

4、遍历相关算法

1.题目:求数组中每一项的总和、平均数。

2.题目:求数组项的最大值和最小值。

5、数组去重和随机样本(面试常考)

1.数组去重:

题目:去掉数组中的重复项。

思路:准备一个空结果数组,遍历原数组,如果遍历到的项不在结果数组中,则推入结果数组。

2.随机样本

题目:请随机从原数组中取3项

思路:准备一个空结果数组,遍历原数组,随机选择一项,推入结果数组,并且将这项删除。

6、冒泡排序

1.冒泡排序是一个著名的排序算法,也是在面试时非常爱考察的算法。

冒泡排序的核心思路是一趟一趟地进行多次项的两两比较,每次都会将最小的元素排好位置,如同水中的气泡上浮—样。

2.n个数字,共需要比较n-1趟,比较次数为n(n-1)/2次。

for(var i=1;i<arr.length;i++){for(var j=arr.length-1;j>=i;j--){if(arr[j]<arr[j-1]){var temp=arr[j];arr[j]=arr[j-1];arr[j-1]=temp;}}

7、二维数组

1.二维数组:以数组作为数组元素的数组,即“数组的数组”。

2.二维数组可以看做是矩阵。

8、基本类型值和引用类型值(面试常考)

1.基本类型和引用类型

基本类型:number、boolean、string、undefined、null

引用类型: array、object、function、regexp…

2.相等判断时的区别
基本类型进行相等判断时,会比较值是否相等。
引用类型进行相等判断时,会比较址是否相等,也就是说它会比较是否为内存中的同一个东西。

3.总结

举例 当var a = b变量传值时 当用==比较时
基本类型值 数字型、字符串型、布尔型、undefined型 内存中产生新的副本 比较值是否相等
引用类型值 对象、数组 内存中不产生新的副本,而是让新变量指向同一个对象 比较内存地址是否相等,即比较是否是同一个对象

9、深克隆和浅克隆

1.使用arr1=arr2的语法不会克隆数组
浅克隆:只克隆数组的第一层,如果是多维数组,或者数组中的项是其他引用类型值,则不克隆其他层。
深克隆:克隆数组的所有层,要使用递归技术,在后面课程介绍。

10、重要知识点

1.数组是什么?应该如何定义?

2.如何检测数组类型?

3.数组有哪些常用方法?

11、较难知识点

1.数组的遍历相关算法、去重和随机样本、冒泡排序。

2.基本类型值和引用类型值的区别。

3.实现浅克隆

6-JS流程控制语句与数组相关推荐

  1. 前端学习笔记之流程控制语句和数组(六)

    流程控制语句 if语句的基本使用 if语句是最简单的条件语句,也称选择语句.它通常结合else一起使用,表示如果--就--否则--. if (测试条件) {// 语句块1// 当测试条件为真,则执行这 ...

  2. 01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)

    1. Java语言主要由5中符号组成 标识符:数字.字母.美元符.下划线(注意不能数字开头) 关键字(被Java赋予特殊意义的单词,注意所有关键字都是小写):   goto和const保留了它们,但是 ...

  3. 2、js流程控制语句

    一.流程控制语句 前提介绍: 顺序结构语句 js默认由上至下执行 分支结构语句 js会根据条件的判断,决定是否执行某段代码 循环结构语句 js会根据条件的判断,反复的执行某段代码 1. prompt函 ...

  4. JS 流程控制语句(ps:今天北京初雪)

    分类 顺序结构(按代码顺序,从上往下执行) 选择结构(分支语句) : if if-else if-else if switch 循环结构:for while do-while for-in 选择结构( ...

  5. JS流程控制语句 二选一 (if...else语句) 语法: if(条件) { 条件成立时执行的代码} else {条件不成立时执行的代码}...

    二选一 (if...else语句) if...else语句是在指定的条件成立时执行代码,在条件不成立时执行else后的代码. 语法: if(条件) { 条件成立时执行的代码} else {条件不成立时 ...

  6. JS流程控制语句 反反复复(while循环) 和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足。...

    反反复复(while循环) 和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足. while语句结构: while(判断条件) {循环语句} 使用whi ...

  7. 05_JS流程控制语句

    JS流程控制语句 顺序结构 选择结构 if-else语句 var a=prompt(''); var b=prompt(''); var c=prompt(''); if(a && b ...

  8. 【JS基础-1】JavaScript语言简单介绍(语法、变量、数组、流程控制语句、函数、对象和事件)

    目录 1 JS概述 2 在HTML中引入JS代码 2.1 内部引用 2.2 外部引用 2.3 功能演示:修改标签内容 2.3.1 内部引用 2.3.2 外部引用 3 JS变量 3.1 变量名的命名规则 ...

  9. javascript基本语法(输入输出语句,变量常量,数据类型,运算符,流程控制语句,数组,函数)

    javascript javascript介绍 JavaScript 是一种客户端脚本语言.运行在客户端浏览器中,每一个浏览器都具备解析 JavaScript 的引擎. 脚本语言:不需要编译,就可以被 ...

最新文章

  1. Android存储路径你了解多少?
  2. [转贴]玩你没商量:ADSL速率数字游戏解密
  3. 数据库-优化-数据库系统配置优化-配置文件优化
  4. linux系统中acpid的作用,ACPID电源按钮事件本地权限提升漏洞
  5. 十道解分式方程及答案_100道八年级分式方程及答案.
  6. 这可能是最详细的Python文件操作
  7. SQL:postgresql中为查询结果增加一个自增序列之ROW_NUMBER () OVER ()的使用
  8. 不要安排看代码的工作
  9. 如何安装mysql 5.72_linux安装MySQL5.7.13(二进制|源码)
  10. linux df命令无反馈,Linux df 命令长时间没有返回
  11. 树莓派3B通过mentohust登录锐捷校园网有线端,并创建WIFI(开热点)供其他设备使用,同时实现开机自启动
  12. 【kafka源码】TopicCommand之alter源码解析(分区扩容)
  13. 实现SDT(software-defined Things)的IOT案例(2)
  14. 格式化后如何修复损坏的JPEG文件?
  15. ObjectARX类库简介
  16. linux nginx rpm 安装配置,Centos下安装nginx rpm包
  17. 关于 Symbol() 能不能当作 key值使用
  18. java trigger_Quartz教程四:Trigger
  19. LIKE通配符的使用
  20. windows7利用EasyBCD安装centos6.3双系统

热门文章

  1. 常见博客程序的市场有这几个
  2. 卷积网络中的通道(Channel)理解
  3. SUS战队专访 | 关于赛题,能说的都在这里了
  4. plsql tables 里面不显示表格
  5. 2022年618值得买的运动装备有哪些?运动装备选购清单
  6. 构建可信软件系统的 10 要素
  7. 06.论Redis持久化的几种方式
  8. cmake使用教程(实操版)(六)
  9. 艾宾浩斯遗忘曲线PHP,艾宾浩斯遗忘曲线
  10. Faster R CNN