中的indexOf方法最近在项目代码中遇到了一个小问题,我将其简化为一个小例子来展示给大家。用心去见***,一定会有收获的。基础扎实的童鞋可以直接用阵型。说到indexOf,大家都不陌生。在判断一个字符串是否包含子串时特别常用(对于正则化不熟练的同学来说是利器)。String类型的使用复习大家熟知的字符串用法,例如letstr='orange';str.indexOf('o');//0str.indexOf('n');//3str.indexOf('c');//-1其中0和3分别是o和n在字符串中出现的位置。起始下标为0,-1表示不匹配。有人曾经问我为什么-1不是null或undefined。你去问制定规则的人!看起来很无奈。大家看到这里没有亮点,不用着急,让numStr='2016';numStr.indexOf('2');//0numStr.indexOf(2);//0这里有一个小点indexOf会做一个简单的类型转换,将数字转换成字符串'2'然后执行。在使用Number类型的时候,你可能想知道是否有一个number类型的indexOf方法,因为它会做隐式转换!明确告诉大家没有,上面的例子letnum=2016;num.indexOf(2);//UncaughtTypeError:num.indexOfisnotafunctionmustbecorrectnumber类型使用了indexOf方法?然后转成字符串,再写上面的例子//二力青年num='2016';num.indexOf(2);//0//普通青年num的写法num.toString().indexOf(2);//0//文艺青年的写法(''+num).indexOf(2);//0***这种写法简单直接,对于已知较短的数来说并非不可能。但是当num变量针对不同的数据发生变化时怎么办呢?第二种写法最常用,但比第三种写法要长一些。哈哈,其实还好。执着于代码整洁的人喜欢使用第三种Array。请打起精神,大boss来了。数组的方法大家都很熟悉,却忽略了数组的indexOf方法(个人感觉)。废话少说,你遇到过什么问题,需要注意的点在哪里?letarr=['orange','2016','2016'];arr.indexOf('orange');//0arr.indexOf('o');//-1arr.indexOf('2016');//1arr.indexOf(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()使用严格相等(与===或三等号运算符使用的相同方法)将searchElement与Array的元素进行比较。一目了然,这里用的是严格相等(===)。当你做出类似的判断时要小心。不要误以为数字会转成字符串,字符串转成数字的方法是不一样的。总结小知识点的积累不是深入讨论的话题,所以这里不对indexOf()的第二个参数进行解释。第二个参数的作用相信大家都知道。不知道的可以看这里的String.prototype.indexOf(),然后结合上面数组的链接来看第二个参数。欢迎来到橙子的个人博客
