indexOf()和includes()方法的使用详解

📝 个人简介

⭐ 个人主页:我是段段🙋‍
🍊 博客领域:编程基础、前端💻
🍅 写作风格:干货!干货!都是干货!
🍑 精选专栏:JavaScript
🛸 支持段段:点赞👍、收藏⭐、留言💬

在写项目的时候,需要实现一个搜索功能,并且能够支持模糊查询,起初最先想到了indexOf()方法,后来觉得includes()方法更好一些,简单记录下

indexOf()

定义:indexOf()方法可返回某个制定的字符串值在字符串中首次出现的位置

语法:

该方法有两个参数:indexOf(val, idx)

val 表示需要查找的字符串值

idx 表示在字符串中开始查找的位置,合法值是 0 到 length - 1;默认值为 0

如果要查找的字符串值没有出现,则该方法返回 -1

首先需要引入log方法

const { log } = console

接下来看一些例子

let str = 'Hello JavaScript!'

log( str.indexOf('H') ) // 0
log( str.indexOf('v') ) // 8
log( str.indexOf('h') ) // -1 表示未找到
log( str.indexOf('v', 0) ) // 8
log( str.indexOf('v', 6) ) // 8
log( str.indexOf('v', 9) ) // -1 表示未找到

log( str.indexOf('a')) // 7 从0开始查找时,只返回首次出现的位置
log( str.indexOf('a', 8)) // 9

let arr = [1, 2, 3, -0]

log( arr.indexOf(1) ) // 0
log( arr.indexOf(4) ) // -1
log( arr.indexOf(1, 1) ) // -1
log( arr.indexOf(+0) ) // 3
  • indexOf()是ES5的方法,也可对数组使用
  • 不够语义化,它的含义是返回找到的字符串首次出现的位置,所以还需要和 -1 进行比较,表达起来不够直观
  • 内部使用相等运算符(===)进行判断,这会导致对NaN的误判(无法判断是否有NaN [NaN].indexOf(NaN) // -1)
  • 对大小写敏感

includes()

定义:includes()方法用来判断字符串是否包含指定的子字符串

语法:

该方法有两个参数: includes(val, idx)

val表示需要查找的子串

idx 表示从那个位置开始查找,默认为 0

如果找到则返回true,否则返回false

接下来看一些例子

let str = 'Hello JavaScript!'

log( str.includes('H') ) // true
log( str.includes('t') ) // true
log( str.includes('h') ) // false 表示未找到
log( str.includes('H', 0) ) // true
log( str.includes('H', 1) ) // false 表示未找到

let arr = [1, 2, 3, +0]

log( arr.includes(1) ) // true
log( arr.includes(4) ) // false
log( arr.includes(1, 1) ) // false

log( arr.includes(-0) ) // true 不区分 -0 和 +0
  • includes()是ES6的方法,也可对数组使用
  • 对大小写敏感
  • 没有区分 -0 和 +0

indexOf()与includes()的区别

一、输入参数相同,且索引都可以为负值

二、返回值类型不同

indexOf()返回索引值,用于判断某一个元素在数组或字符串中首次出现的位置

includes()返回布尔值,用于判断数组或者字符串中是否包含某一元素

三、对 NaN 处理

indexOf()不能判断是否有NaN,而includes()可以判断

let arr = [NaN]

log( arr.indexOf(NaN) ) // -1
log( arr.includes(NaN) ) // true

四、对空值处理

includes()将空值判断为 undefined

let arr = [ , , ]

log( arr.indexOf(undefined) ) // -1
log( arr.includes(undefined) ) // true
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是段段

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值