循环
使用场景
同一个代码块,需要执行多次时,考虑用循环。
书写格式
while(条件){代码块}
功能:条件为真则执行大括号里的代码块,直到条件为假结束。
注:条件是可以变化的(防止死循环)
do{代码块}while{条件}
注:至少执行一次代码块,条件为真执行第二次,
直到条件为假,结束循环。
例如:
for(表达式1;表达式2;表达式3){
代码块4
}
工作流程:
第一次循环:1-2-4-3;
第二次循环:2-4-3;
第三次循环:2-4-3;
第N次循环:2-4-3;
直到2不满足则停止循环。
数组
功能:一个标示符,存储多个数据
声明数组的方式1 (推荐)
【字面量声明】
书写格式:关键字 标识符 赋值符号 中括号 分号;
let qqq = [] ;
赋值
注:每个值之间的分隔符是逗号;
let F70=[1,"abc",undefined,null,true];
console.log(F70,typeof F70);
使用数组中的值
书写格式:数组名称[下标/索引]
可以通过下标(索引),获取数组当前的值。
下标的起始值为0
因此数组中第一个值得下标为0,第二个值得下标为1,依次类推
例如:
console.log(F70[2]);//unfefined
console.log(F70[0]);//1
声明数组的方式2
【构造函数声明】
let F70=new Array();
字面量与构造函数的区别
1:字面量的解析效率比构造函数高
原因:
字面量属于JS0N格式,可以直接被js进行解析。
构造函数需要先调用构造函数,在进行JS引擎解析。
使用场景
解构
功能:把引用数据类型,分解成基本数据类型;
批量赋值
值的互换
例如:
let [a,b,c]=[1,,3];
console.log(a,b,c);//1,undefined,3
let [a, b]=[1,,3];
console.log(a,b,c);//1,2
let [a,,b]=[1,2,3];
console.log(a,b);//1,3
注:解构的左右数据类型,需要一致。
let [i,j]=123;
console.log(i,j);//报错
获取数组不存在值得下标,会获得undefined
let F70=[1,2,3];
console.log(F70[1]);//2
console.log(F70[100]);//undefined
数组的遍历
let f70=[1,2,3,4,5,6,7,8,9,10]
for(let i=0;i<f70.length;i++){
console.log(f70[i]);
}
// 减1就是数组内的下标,下标从0开始,.length是指数组内的值得个数
let f70=[1,2,3,4,5,6,7,8,9,10]
for(let i=0;i<=f70.length-1;i++){
console.log(f70[i]);
}
for.....of 遍历出数组中的每个值
for(let item of f70){
console.log(item);// a,b,c,d,f
}
for.....in 遍历出数组中的每个值得下标
for(let item in f70){
console.log(item);// 0,1,2,3,4,5
}
【常量扩展】
如果赋值给常量的是基本数据类型、则常量存储该基本数据类型变量的具体值
如果赋值给常量的是引用数据类型
则常量存储该基本数据类型变量的地址
注:引用数据类型存储的值发生变化时,常量也会发生变化。
【数组的属性和方法】
数组.length(数组属性)
let(数组.length)=3;
数组增加一位
数组的方法
增加,删除,修改,查找
数组中添加内容,在开头添加多个数据
数组名.unshift()
let f70=["a","b","c","d","f"];
f70.unshift("h","i","J");
console.log(f70);
数组中添加内容,在末尾添加多个数据
数组名.push()
let f70=["a","b","c","d","f"];
f70.push("h","i","J");
console.log(f70);
数组中删除内容,在开头删除一个数据
数组名.shift()
let f70=["a","b","c","d","f"];
f70.shift();
console.log(f70);
数组中删除内容,在末尾删除一个数据
数组名.pop()
let f70=["a","b","c","d","f"];
f70.pop();
console.log(f70);
let f70=["a","b","c","d","f"];
// 删除最后一个值,并返回删除值
let i=f70.pop();
// 删除第一一个值,并返回删除值
let j=f70.shift();
console.log(f70);
// 输出被删除的值
console.log(j,i);
判断数组中是否存在查找的值
书写格式:
数组名.includes(查找内容);
功能查找内容存在,返回true,反之返回false.
数组名.slice(参数1,参数2) 批量获取数组内容
slice不会改变原数组
参数1是起始下标,参数2是结束下标;
获取的范围是从参数1开始,到参数2结束(不包含参数2)的所有内容
注:返回获取的内容,赋值给接受的变量,不会改变原数组
若参数为负数,则用数组长度与其相加。
若没有满足范围的值,返回空数组;
若参数只有1个时,则获取从这个参数到数组的最后一个值;
字符串转数组
运算符[扩展运算符]...
let str="123";
let f70 =[];
f70 = [...str];
console.log(f70);//[1,2,3]
()是添加以什么符号分割,为空则每个都为数组
let date="2020-9-9";
let arr=date.split("-");
console.log(arr);//["2020","9","9"]
数组转字符串
()里添加的字符串的分割符
let arr = [1,2,3];
let str = arr.join("");
console.log(str,typeof str);//123 string
集合
一个标示符(集合),可以存储多个数据
集合与数组的区别
集合的内容具有唯一性(全等匹配===)
数组去重
1.数组转集合
2.集合再转数组 [...函数名]
例如:
let f70=["a"];
f70.push(123);
f70.push(333);
f70.push(333);
console.log(f70);
声明集合 构造函数声明
let arr=new Set(f70);
集合赋值
arr.add(1);
arr.add(2);
arr.add(1);
arr.add("1");
console.log(arr);//1,2,"1"
f70=[...arr];
console.log(f70);
集合的方法和属性
属性size
书写格式:集合.size
功能:输出集合存储数据的个数
let f70 =new Set([1,2,3])
console.log(f70.size);//3
集合的方法
链式调用
一行代码连续书写多个方法
由于add的方法返回的值时集合,因此可以在add后边继续添加add;
f70.add("a").add("b").add("c");
let f72 =f70.add("a");
console.log(f72);//1.2.3.a.b.c
console.log(f70);//1.2.3.a.b.c
集合的删除
集合名.delete(加要删除的内容)
let f73=f70.delete("a");
console.log(f70);//1,2,3,b,c
集合的键值对(键值就是键名)
清空集合
f70.clear();
console.log(f70); //
查找
查找集合内有没有查找的单位,有的话返回ture,没有的话返回false;
console.log(f70.has(1));//true;
for(let item of f70.keys()){//键名
console.log(item);
}
for(let item of f70.values()){//键值
console.log(item);
}
for(let item of f70.entries()){//输出键名,键值以数组方式
console.log(item);
}