简单谈谈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 相关文章推荐
JavaScript 在线压缩和格式化收藏
Jan 16 Javascript
jquery checkbox全选、取消全选实现代码
Mar 05 Javascript
js 验证身份证信息有效性
Mar 28 Javascript
jQuery实现点击该行即可删除HTML表格行
Oct 17 Javascript
JavaScript插件化开发教程(五)
Feb 01 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
Mar 12 Javascript
分享JavaScript与Java中MD5使用两个例子
Dec 23 Javascript
jQuery计算文本框字数及限制文本框字数的方法
Mar 01 Javascript
详解webpack分包及异步加载套路
Jun 29 Javascript
JS简单数组排序操作示例【sort方法】
May 17 Javascript
基于vue写一个全局Message组件的实现
Aug 15 Javascript
Vue中错误图片的处理的实现代码
Nov 07 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的autoLoad自动加载机制
2012/09/27 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
看了就知道什么是JSON
2007/12/09 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
2017/07/09 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
js实现录音上传功能
2019/11/22 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
2020/02/23 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
keras.layer.input()用法说明
2020/06/16 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
澳大利亚牛仔裤商店:Just Jeans
2016/10/13 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
请解释在new与override的区别
2012/10/29 面试题
法定代表人授权委托书范文
2014/08/02 职场文书
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
民间借贷协议书范本
2014/10/01 职场文书
旷工检讨书1000字
2015/01/01 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL
MySQL GRANT用户授权的实现
2021/06/18 MySQL