JS数组中的indexOf⽅法
前⾔
这两天在家中帮朋友做项⽬,项⽬中使⽤了数组的indexOf ⽅法,到了⼀篇⽂章,感觉⾮常不错,顺便整理下以防链接丢失。
相信说到 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).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官⽹⼀看究竟。对此话题感兴趣的朋友可以直接跳转到。
只想了解的朋友下⾯给⼤家官⽅的 Description。
indexOf() compares searchElement to elements of the Array using strict equality (the same method used by the === or triple-
equals operator).
⼀⽬了然,这⾥⽤的是严格等于(===)。⼤家做类似判断的时候多留意。不要误认为数字会转成字符串,同理字符串也不会转换成数字。总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,如果有疑问⼤家可以留⾔交流。
String:indexOf 会将’0’做类型转换,转换为0。
indexof的用法javascriptNumber:没有indexOf ⽅法。需要将数字类型转换为字符串。⽅法有三种。直接字符串、字符串toString、字符串拼接。
Array:数组同样有indexOf ⽅法,只不过做类型判断时,使⽤的严格相等(strict equality),也就是 === 。
原⽂地址:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论