侧边栏壁纸
博主头像
woku博主等级

成功的路上并不拥挤

  • 累计撰写 50 篇文章
  • 累计创建 13 个标签
  • 累计收到 3 条评论

includes

woku
2021-11-22 / 0 评论 / 0 点赞 / 50 阅读 / 1,581 字

基本使用

Array.prototype上的一个内置方法 es2016 es7

const arr = [1,2,3,4,5]
console.log(arr.includes(3))
console.log(arr.includes(6))

第一个参数:查询数组内是否包含某个元素

返回值:bool

includes区分大小写

const arr = [1, 2, 'a', 0]
console.log(arr.includes('A'))  // false

includes区分字符串数字和数字

const arr = [1, 2, 'a', 0]
console.log(arr.includes('1'))  // false
console.log(arr.includes(1)) // true

参数

第一个参数(value)要查询的值

第二个参数(fromIndex) 下标从几开始查找

  • 第二个参数不传,默认从0开始

  • 第二个参数是负数,那么使用 参数+len

  • 当fromIndex > length,不会对数组进行搜索,直接返回false

  • 当fromIndex < length,整个数组都会搜索,从0开始

const arr = [1, 2, 'a', 0]
// 第二个参数fromIndex 
// 第二个参数 从数组下标是多少开始找
console.log(arr.includes(2, 2))
// 第二个参数是负数,那么使用 参数+len
console.log(arr.includes(2, -1))
// 第二个参数不传,默认从第0位开始
// fromIndex > length 
// 不会对数组进行搜索,直接返回false
console.log(arr.includes(2, 4))
// fromIndex < 0  整个数组都会搜索,从0开始
console.log(arr.includes(2, -5))

console.log(arr.includes()) // false
console.log(arr.includes.length) // 1

includes采用零值相等

const arr = [1, 2, 'a', 0]
// -0 === +0
console.log(arr.includes(-0))  // true
console.log(arr.includes(+0))  // true

其他类型数据使用includes

注意:includes是通用方法,调用者并不一定是函数或对象,也可是其他类型数据

eg:

console.log([].includes.call(1, 'a'))
console.log([].includes.call(true, true))
console.log([].includes.call({
    0: 1,
    length: 1
}, 1))

polyfill

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

const narr = [1,2,'a',0]
console.log('----------')
console.log(narr.includes(-0))
console.log([].myIncludes.call({
    0: 1,
    length: 1
}, 1))
0

评论区