Array.prototype.includes()

318 阅读1分钟

includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回 false。

const array = [1, 2, 3]

console.log(array1.includes(2)) //  true

const pets = ['cat', 'dog', 'bat']

console.log(pets.includes('cat')) // true

console.log(pets.includes('at')) // false

includes() 可传入两参数,一个为需要查找的元素值(valueToFind),一个为可选索引值(fromIndex)。从索引处开始查找元素值(valueToFind)。如果为负值,则按升序从 array.length + fromIndex 的索引开始搜(即使从末尾开始往前跳 fromIndex 的绝对值个索引,然后往后搜寻)。默认为 0。

如果在数组中(或 fromIndex 指定的范围中)找到了 valueToFind,则返回 true,否则返回 false。

0 的值将全部视为相等,与符号无关(即 -0 与 0 和 +0 相等),但 false 不被认为与 0 相等。

[1, 2, 3].includes(2)     // true
[1, 2, 3].includes(4)     // false
[1, 2, 3].includes(3, 3)  // false
[1, 2, 3].includes(3, -1) // true
[1, 2, NaN].includes(NaN) // true

如果 fromIndex 为负值,计算出的索引将作为开始搜索searchElement的位置。如果计算出的索引小于 0,则整个数组都会被搜索。

var arr = ['a', 'b', 'c']

arr.includes('a', -100) // true
arr.includes('b', -100) // true
arr.includes('c', -100) // true
arr.includes('a', -2) // false

实现Array.prototype.includes()

Array.prototype.myIncludes = function(value) {
    if (this === null) {
        throw new TypeError('"This" is null')
    }
    let fromIndex = arguments[1]
    let obj = Object(this)
    let len = obj.length >>> 0
    
    if (len === 0) {
        return false
    }
    
    fromIndex = fromIndex | 0
    fromIndex = Math.max(fromIndex >= 0 ? formIndex : len + fromIndex, 0)
    
    while(fromIndex < len) {
        if (value === obj[fromIndex]) {
            return true
        }
        fromIndex++
    }
    return false
}