资讯专栏INFORMATION COLUMN

JavaScript 数组中的 indexOf 方法

468122151 / 2936人阅读

摘要:数组方法大家再熟悉不过了,却忽略了数组有这个方法我个人感觉。输出因为是数组的第个元素,匹配到并返回下标。输出因为此方法从头匹配直到匹配到时返回第一个数组元素的下表,而不是返回全部匹配的下标。

最近项目遇到一个小问题代码我会简化成小例子展示给大家。

用心看到最后会有收获哈,基础扎实的童鞋可以直接跳到数组类型使用。

说到 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).

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

总结

小知识点积累,不作为深入讨论的话题,因此这里没有解释 indexOf() 的第二个参数,相信大家都知道第二个参数的作用,不知道的可以看这里String.prototype.indexOf(),然后结合上面数组的链接也看一下第二个参数。

文章出自 orange 的 个人博客 http://orangexc.xyz/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87958.html

相关文章

  • JS专题之数组去重

    摘要:将元素作为对象的键,默认键对应的值为如果对象中没有这个键,则将这个元素放入结果数组中去。 前言 数组去重在日常开发中的使用频率还是较高的,也是网上随便一抓一大把的话题,所以,我写这篇文章目的在于归纳和总结,既然很多人都在提的数组去重,自己到底了解多少呢。又或者是如果自己在开发中遇到了去重的需求,自己能想到更好的解决方案吗。 这次我们来理一理怎么做数组去重才能做得最合适,既要考虑兼容性,...

    only_do 评论0 收藏0
  • Javascript数组系列二之迭代方法2

    摘要:该方法接受两个参数,一个是元素每一项执行的回调函数,一个是可选参数,回调函数运行时的值。 今天我们来继续 Javascript 数组系列的文章,上文 《Javascript数组系列二之迭代方法1》 我们说到一些数组的迭代方法,我们在开发项目实战的过程中熟练的使用可以大大提高我们的开发效率以及数据的处理。接下来我们继续来讲解其他的一些迭代的方法。 天也黑了,时间也不早了,话不多说,撸起袖...

    fredshare 评论0 收藏0
  • JavaScript es5中的Array常用的forEach、map、filter、indexOf

    摘要:的的区别和相同之处就是数组的遍历循环,回调支持三个参数,第个是遍历的数组内容第个是对应的数组索引,第个是数组本身他是没有返回值得,不需要再下面,更进一步,除了接受一个必须的回调函数参数,还可以接受一个可选的上下文参数改变回调函数里面 Array的forEach、map的区别和相同之处 forEach 1、 forEach就是数组的遍历、循环 ,回调支持三个参数,第1个是遍历的数组内容;...

    xuexiangjys 评论0 收藏0
  • JavaScript数组知多少

    摘要:数组中的元素自动前移,比慢的多。该方法接受一个返回值为布尔类型的函数,对数组中得每个元素使用该函数,如果对于所有的元素,该函数都返回则该方法返回。 数组的维基百科定义是: 在编程语言中,数组数据结构(英语:array data structure),简称数组(英语:Array),是一种数据结构,是数据元素(elements)的集合。元素可以通过索引来任意存取,索引通常是数字,用来计算元...

    Coding01 评论0 收藏0
  • JavaScript面向对象编程——Array类型

    摘要:中并没有明确的数组数据类型。返回数组对象的原始值。专门用于筛选出数组中符合函数判断条件的元素组成的心数组。专门用于对原数组中每个元素执行相同的函数对象规定的操作。 概述 一维数组 数组是一个有序的数据集合,可以通过数组名称和索引进行访问。JavaScript中并没有明确的数组数据类型。 二维数组 数组是可以嵌套的,这就意味着一个数组可以作为一个袁旭被包含在另一个数组里面。利用JavaS...

    DirtyMind 评论0 收藏0

发表评论

0条评论

468122151

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<