简单谈谈JS数组中的indexOf方法


Posted in Javascript onOctober 13, 2016

前言

相信说到 indexOf 大家并不陌生,判断字符串是否包涵子字符串时特别常用,正则不熟练同学的利器。这篇文章就最近遇到的一个问题,用实例再说说说indexOf方法。本文是小知识点积累,不作为深入讨论的话题,因此这里没有解释indexOf()的第二个参数,相信大家都知道第二个参数的作用。

String 类型的使用

温习一下大家熟知的字符串用法,举个

let str = 'orange';

str.indexOf('o'); //0
str.indexOf('n'); //3
str.indexOf('c'); //-1

这里 0 和 3 分别是 o 和 n 在字符串中出现的位置。起始下标是 0。而 -1 代表未匹配。

曾经有人问我为什么偏偏是 -1 不是 null 或者 undefined。你去问制定规则的人啊!一脸无奈。

大家看到这里感觉没什么亮点啊,别急接着再来一个例子

let numStr = '2016';

numStr.indexOf('2'); //0
numStr.indexOf(2); //0

看到这里有个小点就是 indexOf 会做简单的类型转换,把数字转换成字符串 '2' 然后再执行。

Number 类型的使用

大家可能会想 number 类型有没有 indexOf 方法因为会做隐式转换嘛!明确告诉大家没有,上例子

let num = 2016;

num.indexOf(2); //Uncaught TypeError: num.indexOf is not a function

非要对 number 类型使用 indexOf 方法嘞?那就转换成字符串咯,接着上例来写

//二逼青年的写法
num = '2016';
num.indexOf(2); //0

//普通青年的写法
num.toString().indexOf(2); //0

//文艺青年的写法
('' + num).indexOf(2); //0

第一种写法简单直接,对于已知的较短的数字也不是不可行。但是 num 变量针对不同数据是变化的时候,怎么办呢?❌

第二种写法最为常用,但对比第三种写法长了一点。哈哈,其实都可以,代码洁癖的人喜欢第三种 ✅

Array 类型的使用

大家提起精神,大boss来了。

数组方法大家再熟悉不过了,却忽略了数组有 indexOf 这个方法(我个人感觉)。

干说不练瞎扯淡,遇到了什么问题,注意⚠️点又在哪里?

let arr = ['orange', '2016', '2016'];

arr.indexOf('orange'); //0
arr.indexOf('o'); //-1

arr.indexOf('2016'); //1
arr.indexOf(2016); //-1

这里没把例子拆的那么细,四个用例足以说明问题。

    arr.indexOf(‘orange') 输出 0 因为 ‘orange' 是数组的第 0 个元素,匹配到并返回下标。

    arr.indexOf(‘o') 输出 -1 因为此方法不会在每一个元素的基础上再次执行 indexOf 匹配。

    arr.indexOf(‘2016') 输出 1 因为此方法从头匹配直到匹配到时返回第一个数组元素的下表,而不是返回全部匹配的下标。

    arr.indexOf(2016) 输出 -1 注意:这里不会做隐式类型转换。

既然坑已经发现我们不妨刨根问底。去MDN官网一看究竟。对此话题感兴趣的朋友可以直接跳转到Array.prototype.indexOf()

只想了解的朋友下面给大家官方的 Description。

     indexOf() compares searchElement to elements of the Array using strict equality (the same method used by the === or triple-equals operator).

一目了然,这里用的是严格等于(===)。大家做类似判断的时候多留意。不要误认为数字会转成字符串,同理字符串也不会转换成数字。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
jQuery学习总结之jQuery事件
Jun 30 Javascript
原生javascript实现Tab选项卡切换功能
Jan 12 Javascript
原生js结合html5制作小飞龙的简易跳球
Mar 30 Javascript
JavaScript知识点总结之如何提高性能
Jan 15 Javascript
jQuery遍历json的方法(推荐)
Jun 12 Javascript
Vue.js原理分析之observer模块详解
Feb 17 Javascript
webpack构建换肤功能的思路详解
Nov 27 Javascript
js操作二进制数据方法
Mar 03 Javascript
angular实现页面打印局部功能的思考与方法
Apr 13 Javascript
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 Javascript
VUE实现强制渲染,强制更新
Oct 29 Javascript
一篇文章带你浅入webpack的DLL优化打包
Feb 20 Javascript
使用jquery如何获取时间
Oct 13 #Javascript
HTML Table 空白单元格补全的简单实现
Oct 13 #Javascript
微信js-sdk分享功能接口常用逻辑封装示例
Oct 13 #Javascript
js给table赋值的实例代码
Oct 13 #Javascript
js将table的每个td的内容自动赋值给其title属性的方法
Oct 13 #Javascript
jquery获取点击控件的绝对位置简单实例
Oct 13 #Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
Oct 13 #Javascript
You might like
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
使用php伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
2013/11/23 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
详解js中call与apply关键字的作用
2016/11/21 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
js实现的订阅发布者模式简单示例
2020/03/14 Javascript
vuex的使用步骤
2021/01/06 Vue.js
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
Python实时获取cmd的输出
2015/12/13 Python
初步剖析C语言编程中的结构体
2016/01/16 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
python如何制作缩略图
2019/04/30 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
python实现最速下降法
2020/03/24 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
酒店中秋节促销方案
2014/01/30 职场文书
社区庆中秋节活动方案
2014/02/07 职场文书
父亲节活动策划方案
2014/08/24 职场文书
小学生思想品德评语
2014/12/31 职场文书
质检员岗位职责
2015/02/03 职场文书
开天辟地观后感
2015/06/09 职场文书
仰望星空观后感
2015/06/10 职场文书
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript
Windows7下FTP搭建图文教程
2022/08/05 Servers