简单谈谈JS数组中的indexOf方法


Posted in Javascript onOctober 13, 2016

前言

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

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
模仿JQuery sortable效果 代码有错但值得看看
Nov 05 Javascript
在网站上应该用的30个jQuery插件整理
Nov 03 Javascript
JavaScript包装对象使用介绍
Aug 29 Javascript
jquery ajax跨域解决方法(json方式)
Feb 04 Javascript
IE下通过a实现location.href 获取referer的值
Sep 04 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
Oct 08 Javascript
jQuery动态增减行的实例代码解析(推荐)
Dec 05 Javascript
bootstrap multiselect下拉列表功能
Aug 22 Javascript
在Swiper内如何制作CSS3动画效果示例代码
Dec 07 Javascript
深入浅析Vue中的slots/scoped slots
Apr 03 Javascript
VUE脚手架的下载和配置步骤详解
Apr 01 Javascript
解决Vue打包后访问图片/图标不显示的问题
Jul 25 Javascript
使用jquery如何获取时间
Oct 13 #Javascript
HTML Table 空白单元格补全的简单实现
Oct 13 #Javascript
微信js-sdk分享功能接口常用逻辑封装示例
Oct 13 #Javascript
js给table赋值的实例代码
Oct 13 #Javascript
js将table的每个td的内容自动赋值给其title属性的方法
Oct 13 #Javascript
jquery获取点击控件的绝对位置简单实例
Oct 13 #Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
Oct 13 #Javascript
You might like
解析PHP处理换行符的问题 \r\n
2013/06/13 PHP
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
python 产生token及token验证的方法
2018/12/26 Python
python动态进度条的实现代码
2019/07/03 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
基于python实现判断字符串是否数字算法
2020/07/10 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
责任担保书范文
2014/05/21 职场文书
励志演讲稿500字
2014/08/21 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
电子商务实训报告总结
2014/11/05 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
大学生英文求职信范文
2015/03/19 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers