1. 伪数组的特点:
1.具有索引,非负的整数
2.一定要有长度
3.不能使用数组的相关方法
2.伪数组的转换:
创建一个伪数组
let arrayLike = {
0:'ES5',
1:'ES6',
2:'ES7',
length:3
}
//ES5中伪数组的转换方法 Array.prototype.slice.call()
let arr1 = Array.prototype.slice.call(arrayLike);
console.log(arr1 instanceof Array) //true
//ES6中伪数组的转换方法 Array.from()
let arr2 = Array.from(arrayLike)
console.log(arr2 instanceof Array) //true
3.构造数组:
当我们用new Array()重构数组时,如果我们只需要数组里有一个参数,那么传递一个参数,例:
let arr = new Array(3) // [empty × 3] 输出结果为长度为3的空数组 ,不符合我们的需求
console.log(arr)
而ES6中提供了一个新的方法,Array.of() :
例如我们同上面new Array()的例子一样只在Array.of()中传入一个参数:
let arr = Array.of(3)
console.log(arr) // [3] 输出结果为符合我们需求的结果:
4.copyWithin(target, start, end) 用数组中的某些元素替换数组中的某些元素
/*copyWithin(target, start, end) 用数组中的某些元素替换数组中的某些元素,target为从数组的哪个位置开始替换,
start为可选,为从哪个位置开始截取,如不传,则从数组的开头截取
end为可选,为从哪个位置截取结束,如不传,则默认截取到数组结尾,*/
例1:
let arr = [1,2,3,4,5,6]
let arr1 = arr.copyWithin(1)
console.log(arr,arr1) //(6) [1, 1, 2, 3, 4, 5] (6) [1, 1, 2, 3, 4, 5]
例2:
let arr = [1,2,3,4,5,6]
let arr1 = arr.copyWithin(1,3)
console.log(arr,arr1) //(6) [1, 4, 5, 6, 5, 6] (6) [1, 4, 5, 6, 5, 6]
例3:
let arr = [1,2,3,4,5,6]
let arr1 = arr.copyWithin(1,3,5)
console.log(arr1)// (6) [1, 4, 5, 4, 5, 6]
5.fill(ele,start,end)填充覆盖数组元素 ele为填充元素,start为替换开始位置,end为结束位置(不包含):
// 应用场景1: 创建一个制定长度的数组,数组里的元素均为指定元素:
let arr = new Array(3).fill(6)
console.log(arr) //[6,6,6]
//应用场景2:指定元素替换元素:
let arr = [6, 6, 6];
let arr1 = arr.fill('jianShu',1,2)
console.log(arr1) //(3) [6, "jianShu", 6]
6.includes() ,检查数组中是否包含目标元素,并返回布尔值:
let arr = [1,2,3,4,5,6,NaN];
console.log(arr.includes(1)) // true
console.log(arr.includes(8)) // false
indexOf()和includes()的异同:
indexOf() 查找数组中是否包含目标元素,如果包含,返回目标元素的索引值,如果不包含,返回-1
includes()查找数组中是否包含目标元素,如果包含返回true,否则返回false
补充:用includes()和indexOf()检查NaN值时,includes()可检查出数组中是否存在NaN这个值,并返回true,而indexOf()会返回-1,无法检测
console.log(arr.indexOf(NaN)) //-1
console.log(arr.includes(NaN)) //true