JavaScript 数组中的 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).

一览无余,这里用的是严厉即是(===)。人人做相似推断的时刻多注意。不要误认为数字会转成字符串,同理字符串也不会转换成数字。

总结

小知识点积聚,不作为深切议论的话题,因而这里没有诠释 indexOf() 的第二个参数,置信人人都晓得第二个参数的作用,不晓得的能够看这里String.prototype.indexOf(),然后连系上面数组的链接也看一下第二个参数。

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

    原文作者:orange
    原文地址: https://segmentfault.com/a/1190000007144279
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞