简单谈谈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 相关文章推荐
查找iframe里元素的方法可传参
Sep 11 Javascript
js onload处理html页面加载之后的事件
Oct 30 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
Dec 09 Javascript
基于Javascript实现弹出页面效果
Jan 01 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
Sep 08 Javascript
基于JavaScript实现淘宝商品广告效果
Aug 10 Javascript
Angular2+如何去除url中的#号详解
Dec 20 Javascript
对vux点击事件的优化详解
Aug 28 Javascript
mock.js实现模拟生成假数据功能示例
Jan 15 Javascript
Vue使用axios出现options请求方法
May 30 Javascript
vuex 实现getter值赋值给vue组件里的data示例
Nov 05 Javascript
vue开发简单上传图片功能
Jun 30 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验证码类实例分享
2013/12/27 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
Javascript & DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
解析URI与URL之间的区别与联系
2013/11/22 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
微信小程序 video组件详解
2016/10/25 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
原生js 封装get ,post, delete 请求的实例
2017/08/11 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
JS实现放大镜效果
2020/09/21 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
python用户评论标签匹配的解决方法
2018/05/31 Python
Python3实现的旋转矩阵图像算法示例
2019/04/03 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
Django设置Postgresql的操作
2020/05/14 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
悬挂训练绳:TRX
2017/12/14 全球购物
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
事业单位竞聘上岗实施方案
2014/03/28 职场文书
社会实践活动总结报告
2014/04/29 职场文书
公司担保书范文
2014/05/21 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
联谊活动总结范文
2015/05/09 职场文书
重阳节活动主持词
2015/07/04 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python