流程图
流程图是一套标准的图形,用于描述程序的逻辑
圆角矩形、椭圆:表示开始或结束,一个流程图中有且仅有一个开始和结束
菱形:表示判断
平行四边形:表示输入输出
矩形:表示流程中的步骤
各个流程之间使用连接线进行关联
if判断
语法
if(条件1){
// 代码块
} else if(条件2){
// 代码块
} else if(条件3){
// 代码块
}
//....
else{
// 以上条件都不满足执行的代码块
}
注意:
- 如果上面的某个条件满足,则直接忽略下面部分
- if只能出现一次
- else if 可以有0个或多个
- else可以有0个或1个
- 如果代码块只有一条语句,可以省略花括号(但不推荐)
if中的var变量也存在提升
if(!x){ x = 0; } if(x++ >= 1){ var x; x++; } else if(++x >= 2){ x++; } else { x--; } console.log(x); // 3
switch开关
语法
switch(表达式){
case 数据1: {
// 代码块
}
case 数据2: {
// 代码块
}
//...
default: {
// 代码块
}
// ...
}
注意:
- 计算表达式的返回值,然后将其依次和case后面的数据进行严格相等比较,如果与某个相等,就停止比较,然后运行其内部的代码块,再然后,依次运行之后的所有代码块
- 在case分支内部,可以使用break语句,它可以跳出switch结构,让之后的代码不再执行
- 若在default执行前没有执行过break,则default中的代码块就会运行,default的位置不是只能在最后
循环
for循环
for(表达式1; 表达式2; 表达式3){
循环体;
}
while循环
while(条件){
循环体;
}
do while循环
do{
循环体;
}while(条件);
与while循环的区别在于,do while循环至少会执行一次循环体
for in循环
for(var 变量 in 对象){
循环体;
}
每次循环将对象中的一个属性名取出并赋值给变量,然后运行循环体
for in循环能够遍历到对象以及对象的原型链上的所有可枚举属性
循环中的关键字
break:跳出循环体,不运行break之后的代码
continue:停止本轮循环体,不运行continue之后的代码,然后直接进入下轮循环
数组
创建数组
-
new Array(数据, 数据, 数据, ...)创建一个数组,并初始化其每一项的值
若传入的参数只有一个整数,则会把该参数当做数组长度,而不是数组第一项元素的内容
-
new Array(长度)长度必须是一个number类型的正整数(包含0)
若长度>0,则这样创建出的是一个稀松数组
-
[数据, 数据, 数据, ...]创建一个数组,并初始化其每一项的值
数组的本质
数组本质上是一个对象,对数组使用typeof关键字,得到的是"object"
是对象就允许有属性,数组的属性名大部分情况下是数字,数组中的这些数字属性名称之为元素的下标
虽然属性名是数字,但这些数字本质上是字符串,因为属性名只能为字符串
参考对象访问数字属性的方式,使用数组[下标]或数组["下标"]来访问某个数组元素,而数组[下标]最终还是要转换为数组["下标"]
length属性:数组天生自带的属性,表示数组中元素的个数(会计算empty)
允许给数组添加非数字属性名的属性,因为数组就是对象
var arr = [1, 2, 3]; arr.a = 10; console.log(arr);
数组的特质
虽然数组是一个对象,但数组也拥有只属于自己的特性
-
若不指定元素的属性名,则默认使用数字作为元素的属性名,数字属性名是从0开始的,且会依次递增1排列
-
改变数组的length,会自动截断数组或增加数组元素
截断数组:
var arr = [1, 2, 3, 4, 5]; arr.length = 2; console.log(arr);增加数组元素:
var arr = [1, 2, 3]; arr.length = 10; console.log(arr); -
改变数组最大下标,会导致数组的length发生改变
var arr = [1, 2, 3]; arr[10] = 11; console.log(arr); -
length属性是不可枚举的,for in循环遍历不到数组的length属性
不可枚举的属性在调试控制台中都以浅粉色进行显示
实际开发中,不要手动给数组的length赋值
稀松数组
下标不连续(即包含empty)的数组称之为稀松数组
使用下面的方式会生成稀松数组:
-
[,,,]包含3个
empty的稀松数组注意:不是4个empty
-
new Array(3)包含3个
empty的稀松数组
注意:
-
使用for in循环遍历稀松数组时,会将数组的每个下标取出,然后根据取出的下标对元素进行访问,而empty不存在对应的下标,因此empty也无法被for in循环遍历到
var arr = [1, 2, , , 5]; console.log(arr); for(var index in arr){ console.log(arr[index]); } -
类似于访问对象中不存在的属性,访问数组中内容为
empty或超出最大下标的数组元素时,得到的是undefined
为数组添加数据
-
数组[数组.length] = 数据向数组的末尾添加一项数据
-
数组.push(数据1, 数据2, ...)向数组的末尾添加数据
-
数组.unshift(数据1, 数据2, ...)向数组的起始位置添加数据
-
数组.splice(下标, 0, 数据1, 数据2, ...)向数组的指定下标位置处插入数据,原下标位置及其之后的数据后移
如果传入的下标大于等于数组的长度,则在数组的末尾添加数据(等同为push)
如果传入的下标小于等于0,则在数组的起始位置添加数据(等同为unshift)
下标允许为负值,表示从数组的末尾向起始位置数第几个元素位置处进行插入
splice主要用于删除数组元素,这里的0表示删除0个元素,若大于0,则splice会先删再插
删除数组元素
-
delete 数组[下标]这种做法是让
empty替换掉原数据,不会导致数组的length发生改变 -
数组.pop()删除数组的最后一项,并返回删除的项
-
数组.shift()删除数组的第一项,并返回删除的项
-
数组.splice(下标, n[, 数据1, 数据2, ...])从指定下标位置开始,删除n个元素【,然后在下标位置插入数据】
该函数返回一个新数组,其中的元素为被删除的元素序列
下标允许为负值,表示对从数组的末尾向起始位置数第几个元素位置处进行操作
其它操作
-
获取数组片段:
数组.slice([起始下标, 结束下标])返回一个新数组,新数组中保存着原数组从起始下标开始,到结束下标为止,但不包含结束下标的元素序列
该方法不会改变原数组
起始下标默认为0,结束下标默认为数组的长度
下标允许为负值,表示倒数第几个元素
-
查找元素:
数组.indexOf(元素)查找并返回第一个匹配元素的下标
若找到则返回下标,否则返回-1
内部使用严格相等进行比较
-
查找元素:
数组.lastIndexOf(元素)查找并返回最后一个匹配元素的下标
若找到则返回下标,否则返回-1
内部使用严格相等进行比较
-
填充数据:
数组.fill()数组.fill(数据):将数组的所有元素填充为数据数组.fill(数据, 开始下标):将数组中从开始下标开始到末尾的元素填充为数据数组.fill(数据, 开始下标, 结束下标):将数组中从开始下标开始到结束下标为止,但不包含结束下标的元素填充为数据数据默认为undefined会考虑数组的empty位置
如果你填充的是引用值,则数组的每个元素都将会变为该引用值
var arr = new Array(2).fill({}) console.log(arr[0] === arr[1]); // true -
数组.join(分隔符)返回值为字符串,字符串是数组的每个元素拼接后的结果,相邻元素之间使用
分隔符相连分隔符默认为
","注意:empty元素会被join当做空串,如:
new Array(3).join()得到",," -
数组连接:
数组1.concat(数组2, 数组3, ...)返回一个新数组,数组中的元素依次为数组1中的元素序列、数组2中的元素序列、数组3中的元素序列
不会影响到数组1、数组2、数组3...
in关键字
in关键字用于判断属性是否属于某个对象,表达式的返回类型为boolean
格式:"属性名" in 对象
in关键字同样适用于数组,如下标 in 数组
该方法能够对原型链上的属性进行检测