Array构造函数
- 创建Array对象
- 调用Array()时可以使用或者不适用new,都会创建一个新的Array实例
- 参数
- elementN:根据给地的元素创建一个js数组,但是当仅有一个参数为数字时除外
- arrayLength:如果传递给Array构造函数的唯一参数是介于0到2^32-1(含)之间的整数,这将返回一个新的js数组,其length属性设置为该数字(稀疏数组)
- 异常
- RangeError:如果只有一个参数且其值不在0到2^32-1之间,则会触发异常
静态方法
- Array.from()
- 从可迭代或类数组对象创建一个新的浅拷贝的数组实例
- 语法:
- Array.from(arrayLike)
- Array.from(arrayLike, mapFn)
- Array.from(arrayLike, mapFn, thisArg)
- 参数
- arrayLike:想要转换成数组的类数组或可迭代对象
- mapFn:调用数组每个元素的函数。如果提供,每个将要添加到数组中的值首先会传递给该函数,然后将 mapFn 的返回值增加到数组中。使用以下参数调用该函数:
- element:数组当前正在处理的元素
- index:数组当前正在处理的元素的索引
- thisArg:执行 mapFn 时用作 this 的值
- Array.myfrom(arrayLike, mapFn=undefined, thisArg)
Array.myFrom = function (arrayLike, mapFn = undefined, thisArg) {
// 定义报错需要类型和值一块返回的几种基本类型
const typeList = ['number', 'string', 'boolean']
let arrLike = arrayLike
// 如果mapFn存在但是不为函数类型或者mapFn为null,报错
if (mapFn !== undefined && typeof mapFn !== 'function') {
const mapFnType = typeof mapFn
throw new Error(
`${
typeList.includes(mapFnType) || mapFn === null
? `${mapFnType} ${mapFn}`
: mapFnType
} is not a function`
)
}
// 如果参数是可迭代数组,直接使用扩展运算符转为数组
if (arrayLike[Symbol.iterator]) {
arrLike = [...arrayLike]
}
// 获取数组或者可迭代对象的length,并进行循环赋值
const len = arrLike.length
if (len >= 0 && len <= 2 ** 32 - 1) {
// 构建一个长度为length的空数组
let arr = new Array(len)
for (let i = 0; i < len; i++) {
// 循环赋值,如果存在mapFn函数,则使用mapFn函数处理每一项的值,如果值是undefined或者empty,则均转为undefined
// 如果存在thisArg参数,则将mapFn的this指向mapFn
arr[i] = mapFn
? mapFn.call(thisArg, arrLike[i], i)
: arrLike[i] || undefined
}
return arr
} else {
// 超过数组长度范围报错
throw new RangeError('Invalid array length')
}
}
标签:arrayLike,mapFn,js,参数,数组,Array
From: https://www.cnblogs.com/shenhf/p/18605786