简单谈谈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 相关文章推荐
Javascript 命名空间模式
Nov 01 Javascript
nw.js实现类似微信的聊天软件
Mar 16 Javascript
javascript检查浏览器是否已经启用XX功能
Jul 10 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
Jul 17 Javascript
学习JavaScript设计模式之模板方法模式
Jan 20 Javascript
Json按某个键的值进行排序
Dec 22 Javascript
Vue.js中组件中的slot实例详解
Jul 17 Javascript
webpack 1.x升级过程中的踩坑总结大全
Aug 09 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
Sep 18 Javascript
在vue中根据光标的显示与消失实现下拉列表
Sep 29 Javascript
微信小程序实现搜索框功能及踩过的坑
Jun 19 Javascript
JavaScript架构localStorage特殊场景下二次封装操作
Jun 21 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
用PHP4访问Oracle815
2006/10/09 PHP
php生成xml简单实例代码
2009/12/16 PHP
php 归并排序 数组交集
2011/05/10 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
javascript中callee与caller的区别分析
2015/04/20 Javascript
两种JS实现屏蔽鼠标右键的方法
2020/08/20 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
ejsExcel模板在Vue.js项目中的实际运用
2018/01/27 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
英国著名的化妆品折扣网站:Allbeauty.com
2016/07/21 全球购物
英国川宁茶官方网站:Twinings茶
2019/05/21 全球购物
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
医院护士专业个人的求职信
2013/12/09 职场文书
土建施工员岗位职责
2014/07/16 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
党员检讨书范文
2014/12/27 职场文书
2016年春节慰问信息
2015/03/25 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android