简单谈谈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 表单取值赋值的一些基本操作
Oct 11 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
Nov 26 Javascript
jquery操作select详解(取值,设置选中)
Feb 07 Javascript
javascript实现限制上传文件大小
Feb 06 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
Jan 09 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
Jan 13 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
Jun 14 Javascript
VUEX-action可以修改state吗
Nov 19 Javascript
es6 super关键字的理解与应用实例分析
Feb 15 Javascript
JS手写一个自定义Promise操作示例
Mar 16 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
Mar 25 Javascript
Js图片点击切换轮播实现代码
Jul 27 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 验证码的实现代码
2011/07/17 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
php rsa加密解密使用详解
2015/01/14 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
express的中间件cookieParser详解
2014/12/04 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
JS解析XML实例分析
2015/01/30 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
实例教学如何写vue插件
2017/11/30 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
Vue+mui实现图片的本地缓存示例代码
2018/05/24 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
Python中的ceil()方法使用教程
2015/05/14 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
html5使用canvas画一条线
2014/12/15 HTML / CSS
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
小学教师节活动方案
2014/01/31 职场文书
工作态度检讨书
2014/02/11 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
军训感想500字
2014/02/20 职场文书
ktv周年庆活动方案
2014/08/18 职场文书
2014年稽查工作总结
2014/12/20 职场文书
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python