push:
Array.prototype.myPush = function () {
for (var i = 0; i < arguments.length; i++) {
//arguments代表实参的集合
//this 指向的是arr数组
this[this.length] = arguments[i];
}
//由于push 返回值 是一个数组的长度 所以 我们来个return;
return this.length;
};
indexOf:
Array.prototype.myIndexOf = function (param, start = 0) {
//如果start大于等于数组长度,此时this[start]越界,返回-1
if (start >= this.length) return -1
//如果start小于0,判断start + this.length
if (start < 0) {
start = start + this.length < 0 ? 0 : start + this.length;
}
//start处理完毕,开始从start处遍历数组,查找元素下标
for (let i = 0; i < this.length; i++) {
if (this[i] === param) return i;
}
//遍历完毕没有找到相应元素,返回-1
return -1
}
includes:
Array.prototype.myIncludes = function (param, start = 0) {
if (start >= this.length) return false
if (start < 0) {
start = start + this.length < 0 ? 0 : start + this.length;
}
//start处理完毕后,判断要查找的元素是不是NaN,
if (Number.isNaN(param)) {
//param是NaN,从start处开始逐个判断数组中的元素是不是NaN,如果是,返回true
for (let i = start; i < this.length; i++) {
if (Number.isNaN(this[i])) return true;
}
} else {
//param不是NaN,使用===比较即可
for (let i = start; i < this.length; i++) {
if (this[i] === param) return true;
}
}
return false
}