js基础笔记

34 阅读4分钟

1.数组(Array)

数组也是一种复合数据类型,在数组组中可以存储不同类型的数据。存储的数据是有序的,每个数据都有唯一索引(index)。

创建数组

let a = new Array() let a = []

注: 如果读取数组中不存在的元素,不报错而是返回undefined.tyeof 返回object 向数组最后添加元素:a[a.length]=元素

length是可以修改的:a.length=5 ,长度变长会有空元素,长度变短会删除元素。

遍历数组

//正着遍历 for(let i=0;i<arr.length;i++){ arr[i] }

//倒着遍历 for(let i=arr.length-1;i>=0;i--){ arr[i] }

//可定制性没有for循环灵活,用来遍历柯迭代对象包括遍历字符串内容 for(let item of arr){ console.log(item) }

//判断是否是素组

let a=[1,2] a.isArray(a)//true

//获取数组中一个元素

let arr = [1,2,3,4] arr[0] //1 不可传入负值 arr.at(0) //1 可以传入负值 arr.at(-1) //4 等价于 arr[arr.length-1] 4

//数组连接可连接多个

concat不会破坏原来数组结构,不会影响原数组,生成新数组。 let a = [1,2] let b = [3,4] let c = a.concat(b)

//indexOf() 数组是否存在某个元素第一次出现的下标

let a=[1,2,3] let r=a.indexOf(1) //检查是否有1,返回下标0

let r=a.indexOf(1,3) //第二个参数是其实位置,从下标3开始查询。

没有找到返回-1

//join 数组变成字符串

let a = [1,2,3,4] let r= a.join() //"1,2,3,4" 用逗号分开

join("-")//将默认连接符逗号换成-

slice 截取数组,对原数组没有影响

let a= [1,2,3,4] let r= a.slice(0,2) //[1,2] 第一个参数截取位置包括截取位置,第二个参数结束位置,不包括截取位置。 let r= a.slice(1) //[2,3,4] 从索引1一直截取到最后 let r= a.slice() // [1,2,3,4] 对数组进行浅复制

如: let a = [1,2] let b=a
这种不叫复制,只是将地址进行赋值,影响到原数组,复制是会产生新的对象。

变量一个存储空间,存储值地址。 值一个存储空间,存的两个值地址,指向两个值

2024-04-25_110307.png let a = [1,2] let b= a.slice() b===a //false

浅拷贝,深拷贝

存储原始值,不区分深浅拷贝,针对对象数据 let a = [ {name:"李四"} ]

2024-04-25_112133.png 浅拷贝只复制了第一层,不会复制下一层属性或元素,只是复制对象本身,所以还是会影响到下一层元素修改。 深拷贝不仅复制对象本身,还复制对象中的属性或元素,但因为性能问题,不建议多层次深拷贝。

structuredClone进行深拷贝

let b=structuredClone(a)

扩展使用展开运算符进行浅拷贝

let a =[1,2,3] let b= [a[0],a[1],a[2]] //将a数组中的数据一个一个放入新数组中。 let c=[...a] 等价于 let b= [a[0],a[1],a[2]] let c=[2,...a,5]//还可以添加其他数据

对象浅拷贝assign let a = {name:"李四"} let b =Object.assign({},a) //把后边对象属性赋值到前面新对象中,第一个参数目标对象,第二个参数被复制对象,相同属性被覆盖

展开运算符进行拷贝 let c = {...a} 等价于let b =Object.assign({},a)

push

数组末尾添加元素,返回数组长度 let a = [1,2] a.push(3)

pop

删除数组最后一个元素,返回值返回删除的元素 let a = [1,2] a.pop()

unshift

数组开头添加元素,返回数组长度 let a = [1,2] a.unshift(3)

shift

删除数组前面元素 let a = [1,2] a.shift()

splice

删除,插入,替换数组元素 let a = [1,2] //第一个参数删除起始位置,第二个参数删除数量,返回被删除的元素 a.splice(1,1) //第三个参数索引为一1的位置变成3.删除并替换。 a.splice(1,1,3) //第二个参数为0,变成插入数据,插入索引为1的前面 a.splice(1,0,3)

reverse

反转 let a = [1,2,3] a.reverse // [3,2,1]

数组去重

let a= [1,2,4,3,4,6,7,8,9,4]

方法一:将元素分别进行比较删除重复的。 for(let i=0;i<a.length;i++){ //当前值后面的值 for(let j=i+1;j<a.length;j++){ if(a[i]===a[j]){ a.splice(j,1) } }

} 但是当连续出现重复数据时,失效。当删除一个重复的,下一个重复数据会向前补位,因为之前位置对比过,所以不会再进行对比, let a= [1,2,4,3,4,4,4,6,7,8,9,4]

for(let i=0;i<a.length;i++){ //当前值后面的值 for(let j=i+1;j<a.length;j++){ if(a[i]===a[j]){ a.splice(j,1) 解决办法,删除之后,这个位置在比较下 j-- } }

}

方法二: let a= [1,2,4,3,4,4,4,6,7,8,9,4] for(let i=0;i<a.length;i++){ //从当前下标下一个开始查找,下一个是否有相同的元素

let index= a.indexOf(a[i],i+1) if(index!==-1){ a.splice(index,1) i-- } }

方法三: let a=[1,2,4,3,4,4,4,6,7,8,9,4] let b= [] for(let ele of a){ //新数组没有元素,加入新数组 if(b.indexOf(ele)===-1){ b.push(ele) } }