1.indexOf的用法

indexOf() 方法可返回数组中某个指定的元素位置。
该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时)。如果找到一个 item,则返回 item 的第一次出现的位置。开始位置的索引为 0。
如果在数组中没找到指定元素则返回 -1。
lastIndexOf 从后向前查找,即返回最后一次出现的下标

indexOf有两个参数,第一个参数是要查询的元素,第二个参数是开始查询位置的下标start。
当start不传入时,start默认为0,
当start负值时,判断arr.length+start,如果相加后小于0,则从0开始,
如果大于0,则从arr.length+start开始,即从倒数|start|位置开始
indexOf不能判断NaN,includes可以判断NaN

2.indexOf使用示例

        const arr = [1, 2, 3, 3, 4, 5]        console.log(arr.indexOf(3));// 2        console.log(arr.indexOf(3, -2));//从倒数第二个元素开始查找 -1        console.log(arr.indexOf(3, 3));//从下标3出开始查找 3

3.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        }

4.includes用法

includes与indexOf的不同有两点:
1.includes返回的是boolean,如果查找到元素,返回true,否则返回false
2.includes可以判断数组中是否存在NaN

5.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        }
仅为个人理解,如有错谬,欢迎指正。
如果对您有所帮助,请您点个赞吧!