目录
1,数组(array)简介
array:存储多个同类型的数据,数组是引用类型。
创建数组:
//1.使用new关键字
let nameList = new Array();
//2,使用[]字面量。
let nameList = [];
数据在array中以索引
进行存储,数据在数组中是有序的。可以通过索引访问数组中的数据,索引是从0开始的
。
let arr = [1,2,3];
console.log(arr[0]) //1
数组也是一种对象。所以数组也有属性,其中length属性表示数组的长度,也就是数组中元素的个数。
let arr = [1,2,3];
console.log(arr.length) //3
2,数组常用的方法
arr[0]使用索引对数组里面的元素进行读与写。
let arr = [1, 2, 3];
arr[0] = 'a';
console.log(arr[0]); //a
2.1,push方法
push方法:用于向数组的最后追加一个元素。
let arr = [1,2,3];
arr.push(4);
console.log(arr) //1,2,3,4
2.2,pop
pop:用于删除数组中最后一个元素,返回值是删除的这个元素。
let arr = [1,2,6];
console.log(arr.pop()) //6
数组中的push和pop是一对栈(stack)。栈是一个线性数据结构,只有一个入口同时也是出口,先进后出,后进先出。
2.3,unshift
unshift:将一个元素添加到数组的最前端。
var arr = [1,2,6];
arr.unshift('a')
console.log(arr) //[ "a", 1, 2, 6 ]
2.4,shift
shift:从数组最前端删除一个元素,返回值也是删除的元素。
var arr = [1,2,6];
console.log(arr.shift()) //1
Shift和unshift也是一对栈操作。Push和shift是一对,队列(queue)操作。队列是一种线性的数据结构,先进先出,后进后出。
2.5,splice
参数 | 描述 |
---|---|
index | 必需。整数,规定添加/删除元素的位置(元素在数组的下标),使用负数可从数组结尾处规定位置。 |
howmany | 必需。要删除的元素数量。如果设置为 0,则不会删除元素。 |
item1, …, itemX | 可选。向数组添加新的元素。 |
var arr1 = ['a','b','c'];
arr1.splice(2,1,99,88);
console.log(arr1) //[ "a", "b", 99, 88 ]
2.6,reverse
reverse:用于将数组中的元素顺序反转
var arr1 = ['a','b','c'];
arr1.reverse()
console.log(arr1) //[ "c", "b", "a" ]
2.7,slice
slice:用于数组截取,有2个参数。
参数 | 描述 |
---|---|
1参 | 从哪个位置开始截取(包含)。 |
2参 | 截取到哪个位置(不包含当前位置元素),把截取的内容返回到新数组上,原数组不变。 |
注意 | 如果不写第二个参数,则截取到最后。如果第二个参数写-n ,则表示截取到倒数第n个。 |
var arr1 = ['a','b','c','d','e'];
console.log(arr1.slice(1,3)) //[ "b", "c" ]
2.8,indexof
indexof:获取元素第一次在数组中出现的索引,如果不包含则返回-1。
var arr1 = ['a','b','c','d','e'];
console.log(arr1.indexOf('c')) //2
console.log(arr1.indexOf('w')) //-1
2.9,join
join:将数组的内容拼接成一个字符串。
let arr1 = ['a','b','c','d','e'];
let str = arr1.join('')
console.log(str) //abcde
2.10,concat
concat方法:可以把两个数组里的元素拼接成一个新的数组, 返回值: 返回拼接后的新数组。
let arr1 = [1,2,3];
let arr2 = [4,5,6];
let arr = arr1.concat(arr2);
console.log(arr); //arr = [1,2,3,4,5,6];
3,伪数组(类数组)
定义:在js中存在一些特殊的对象,有length属性和数值索引属性,可以像数组一样使用方括号语法访问元素,但它们缺少数组所具有的许多内置方法(如 push、pop 等),这些对象可以统称为伪数组或类数组。
3.1,常见的伪数组
arguments 对象
:当函数被调用时,会生成一个 arguments 对象,包含所有传递给函数的参数。
function example() {
console.log(arguments); // 输出伪数组
console.log(arguments.length); // 输出参数的数量
console.log(arguments[0]); // 访问第一个参数
}
example(1, 2, 3); // 输出:[1, 2, 3]
DOM方法返回的集合
:例如 document.getElementsByClassName() 和 document.getElementsByTagName()等DOM方法返回的集合,都是伪数组。
let divs = document.getElementsByTagName('div');
console.log(divs); // 输出一个伪数组,包含所有的 div 元素
NodeList 对象
:querySelectorAll 返回的也是一种伪数组。
let nodes = document.querySelectorAll('p');
console.log(nodes); // 输出一个 NodeList 伪数组
3.2,伪数组和数组的区别
类型不同:伪数组的类型是 Object,而真正的数组类型是 Array。
缺少数组方法:伪数组不具备数组的内置方法,如 push()、map()、forEach() 等。
可访问性:伪数组可以通过索引访问元素,并拥有 length 属性,但没有原生数组的功能。
3.3,伪数组转换为真正的数组
Array.from
let arr = Array.from(arguments); // arguments 是伪数组
Array.prototype.slice.call()
let arr = Array.prototype.slice.call(arguments);
扩展运算符 (...)
let arr = Array.prototype.slice.call(arguments);