这周所学习了JS中的数组以及集合(也会讲一些知识相关联的内容)
一、数组
功能:一个标识符,存储多个数据
创建数组(2种方法):
1、字面量声明 let 数组名=[元素1,元素2,元素n] ;
2、构造函数 let 数组名=new Array(元素1,元素2,元素n);
数组中的值:数组中的每一个值都对应着一个下标,下标是从0开始的。
- 字面量与构造函数的区别
- 字面量的解析效率比构造函数高
- 原因:
- 字面量属于JSON格式,可以直接被JS进行解析。
- 构造函数需要先调用构造函数,在进行JS引擎解析。
解构(功能:把引用数据类型分解成基本数据类型,左右类型一致)
可以用于两个变量进行值的交换,批量赋值,右侧的值赋值给左侧.
获取数组长度
书写格式:数组名.length
获取数组不存在的下标会出现undefined。
数组的遍历
let arr = [“A”, “B”, “C”, “D”, “E”, “F”, “G”];
for…of 遍历出数组中的每个值
for (let item of arr) {
console.log(item); //“A”, “B”, “C”, “D”, “E”, “F”, “G”
}
for…in 遍历出数组中每个值的下标
for (let item in arr) {
console.log(item); //0,1,2,3,4,5,6
}
[常量的扩展]
如果赋值给常量的是基本数据类型则常量存储该基本类型变量具体的值(基本数据类型存储第一次的值是不可变的).
如果赋值给常量的是引用数据类型(数组、对象)则存储的是引用数据类型变量的地址,当引用数据存储的值发生变化时、常量也会发生变化。
数组的属性和方法
数组名.length这个是属性。
数组的方法
增、删、改、查
const rs = require("readline-sync");
//增
let arr=["b"];
// push在数组尾部添加内容 数组名.push(元素1、元素2、元素n) 原数组改变
let arr1=arr.push("c","d");
// console.log(arr);//["a","b","c","d"]
// console.log(arr1);//返回添加后的长度
//数组开头添加 数组名.unshift(元素1、元素2、元素n) 原数组改变
arr.unshift("a");
console.log(arr);
//删
// 删除数组中第一个 数组名.shift()原数组改变
arr.shift();
console.log(arr);
// 删除数组中最后第一个 数组名.pop()原数组改变
arr.pop();
console.log(arr);
//判断数组中是否存在查找的值
/*
* 书写格式:
* 数组.includes(查找内容)
* 功能:查找内容存在,返回true,反之返回false
*/
let inputnum="c";
let cz=arr.includes("c");
console.log(inputnum,cz); // c true
//位置方法 indexOf()从前往后查找 从数组开头(位置0)开始查找返回值number 如果没查找到返回-1、从前往后查找,返回第1个匹配值的下标。就不再继续查找
//lastindexOf()后往前查找 返回值number 如果没查找到返回-1、从后往前查找,返回第1个匹配值的下标。就不再继续查找
cz=arr.indexOf(inputnum);
console.log(cz);//1
let input="z";
cz=arr.indexOf(input);
console.log(cz);//-1
F73 = ["A", "B", "C", "A"];
let inpu=F73.lastIndexOf("A");
console.log(inpu); //3
// 封装一个方法实现indexof的功能
var nums=[2,5,6,8,9,,3];
function ArrayIndexOf(arr,value){
for(var i=0;i<nums.length;i++){
if(arr[i]===value){
return i;
}
}
return -1;
}
var ps=ArrayIndexOf(nums,6); //返回2
console.log(ps);
// 截取字符串 slice(start,end) 包括start 不包括end slice不会改变原数组 若参数为负数,则用数组长度与其相加。
//若没有满足范围的值,返回空数组。 若参数只有一个,则获取从这个参数到数组的最后一个值
let arr2=["asd","fhg","jkl","zxc","bnm"];
console.log(arr2.slice(1,3));//["fhg","jkl"]
//修改 插入 splice(参数1、参数2、参数3)
/*
只有参数1:从这个参数的下标截取到最后一个值存储一个新数组返回
只有2个参数:第一个参数起始下标 第二个参数截取个数
3个参数:第一个起始下标 第二个截取个数(非0代表修改) 第三个参数以及后都是插入或修改的值
*/
let arr3=["A","B","C","D"];
// let ar=arr3.splice(1)
// console.log(ar);//["B","C","D"]
let a=arr3.splice(1,2);
//console.log(a);//["B","c"]
//console.log(arr3);//["A","D"]
// let arr4=arr3.splice(1,0,2);
// console.log(arr3);
// 字符串转数组 可以用split [...]扩展运算符
let str="abcd";
// let arr6=[...str];
// console.log(arr6);
console.log(str.split(""));
// 数组转换为字符串
let Arr=[1,2,3,4,5,6,7];
let sz=Arr.join(",");
console.log(sz,typeof sz);
//清空数组的方式
// let F70 = ["A", "B", "C", NaN, "E", "F"];
// F70.splice(0);
// F70=[];
// F70.length = 0;
// console.log(F70); //[]
//查找数组中是否存在NaN
// console.log(F70.lastIndexOf(NaN)); //-1
// console.log(F70.indexOf(NaN)); //-1
// console.log(F70.includes(NaN)); //有就返回true
// 求五个数中最大数
console.log(`请入5个数字:(每个数字之间用逗号分隔)`);
let inputStr = rs.question();
let arr8= inputStr.split(",");
let num = arr8.join("");
if (num == num - 0) { //是不是纯数字
if (arr8.length == 5) { //判断是否输入的是5个数字
let maxNum = Math.max(...arr8);
console.log(maxNum);
}
}
二、集合
功能:一个标识符(集合),可以存储多个数据,但数据不能重复
集合与数据的区别
集合的内容具有唯一性(全等匹配"===")。
声明集合:构造函数
let jh=new Set();
let jh=new Set();
// 集合赋值
jh.add("A");
console.log(jh); //Set{"A"}
// 批量赋值
jh.add("B").add("C").add("D");//Set {"A","B","C","D"}
console.log(jh);
// 数组
let F71=["A","B"];
F71.push("C");
F71.push("C");
F71.push("D");
console.log(F71);//["A","B","C","C","D"]
//集合具有去重功能
let F72=new Set(F71);
console.log(F72) //["A","B","C","D"]
// 集合的方法
/* 链式调用
* 一行代码连续书写多个方法。
* 由于add方法的返回值是集合
* 因此可以在add后面继续添加add
*/
let F73=new Set();
F73.add("A").add("B").add("C");
console.log(F73);
/**
* 属性size
* 书写格式: 集合.size
* 功能:输出集合存储数据的个数
*/
console.log(F73.size);//3
// 删除集合中的内容
F73.delete("A");
console.log(F73); //Set {"B","C"}
// 集合查找 .has() 找到返回true 反则之
console.log(F73.has("B")); //true
// //集合的键值对(键值就是键名)
// //清空集合
F73.clear();
console.log(F73);//{}
//查找
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);
}
三、函数
函数分为两种:一种是没有返回值函数、另一种是带有返回值函数(return),无论哪一种函数都要用function来定义。
/ 函数三要素 函数名 参数(分为形参和实参) 返回值(有返回值就返回return后的值
//没有返回值就会返回undefined return只有一个返回值 用数组可以接收多个值 return具有终止函数功能)
/**
* 【参数】
* 1、形参(形式参数)
* 在函数声明的时候
*
* 2、实参(实际参数)
* 在调用函数的时候
*
* 形参的个数比实参多,多的形参数为undefined
* 实参的个数比形参多,多的实参数不会使用。
*
*/
//定义函数后要 调用函数否则函数本身是不会执行的
/**
* 字面量声明
* 书写格式: 关键字 标识符(函数名) 小括号 {函数体}
* function F70 () {函数体}
*/
function 函数名 (参数1,参数2,参数n){
函数体
}
function 函数名 (参数1,参数2,参数n){
函数体
return 返回值;
}
函数名 (参数1,参数2,参数n);
/**
* 调用函数(执行函数体)直接调用 在表达上中调用 在超链接中调用 在事件中调用
* 书写格式:
* 函数名 小括号
*/
/*
* 构造函数声明
* 书写格式: 关键字 标识符 赋值符号 new Function();
* let F70 = new Function();
*/
// let F70 = new Function();
// F70();