最近工作中遇到一个小问题。我将把这篇文章的代码简化成一个小例子给你看。下面详细介绍一下JS数组中的indexOf方法,用心看看最后会不会有收获。有需要的朋友来看看吧。
前言
相信大家对indexOf并不陌生,在判断一个字符串是否包含子串时尤其常用,对于正规不熟练的同学来说是一个利器。本文以最近的一个问题为例,讨论indexOf方法。本文是小知识点的积累,不是作为话题进行深入讨论,所以这里不解释indexOf()的第二个参数。相信大家都知道第二个参数的作用。
String 类型的使用
回顾众所周知的字符串用法,例如
设str= orange
str . index of( o );//0
str . index of( n );//3
str . index of( c );//-1
这里0和3分别是O和N在字符串中出现的位置。起始下标是0。-1表示不匹配。
曾经有人问我为什么是-1而不是null或者undefined。去问制定规则的人!一脸的无奈。
大家都觉得这里没什么亮点。别急,我们再举个例子。
let numStr= 2016
numstr . index of( 2 );//0
numstr . index of(2);//0
这里有个小点,就是indexOf可以做简单的类型转换,把数字转换成字符串‘2’然后执行。
Number 类型的使用
你可能想知道number类型是否有indexOf方法,因为它可以做隐式转换!明确告诉大家,上面的例子。
设num=2016
num . index of(2);//未捕获的类型错误:num.indexOf不是函数
是否要对数字类型使用indexOf方法?然后转换成一个字符串,再写成前面的例子。
//白痴青年的写作
num= 2016
num . index of(2);//0
//普通青年的写作
num.toString()。index of(2);//0
//文艺青年写作
(数字)。index of(2);//0
第一种写法简单直接,对于已知的较短的数也不是不可以。但是当num变量针对不同的数据发生变化时,该怎么办?
第二种写法最常用,但比第三种写法长一点。哈哈,其实还可以。代码纯粹主义者喜欢第三种。
Array 类型的使用
大家打起精神来。大老板来了。
数组的方法大家都很熟悉,但是忽略了数组有indexOf(我个人感觉)的方法。
不练就瞎说。你遇到过哪些问题?你的注意点在哪里?
let arr=[橙, 2016 , 2016 ];
arr . index of( orange );//0
arr . index of( o );//-1
arr . index of( 2016 );//1
arr . index of(2016);//-1
没有这里举例那么详细。四个用例足以说明问题。
Arr.indexOf(orange )输出0,因为 orange 是数组的第0个元素,匹配并返回下标。
Arr.indexOf (o )输出-1,因为此方法不会在每个元素的基础上再次执行indexOf匹配。
Arr.indexOf(2016 )输出1,因为此方法返回从匹配开始到结束的第一个数组元素的下表,而不是返回所有匹配的下标。
Arr.indexOf(2016) Output -1注意:这里不做隐式类型转换。
既然坑已经找到了,我们不妨一探究竟。去MDN官网看看。对这个话题感兴趣的朋友可以直接跳转到Array.prototype.indexOf()
只是想知道下面的朋友给你官方的描述。
indexOf()使用严格相等(与===或triple-equals运算符使用的方法相同)将searchElement与数组的元素进行比较。
一看,这里用的是严格等于(===)。做类似判断的时候多加注意。不要把数字错当成字符串,就像字符串不会转换成数字一样。
总结
这就是本文的全部内容。希望这篇文章的内容能给你的学习或者工作带来一些帮助。有问题可以留言交流。