简单谈谈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 相关文章推荐
js活用事件触发对象动作
Aug 10 Javascript
工作中常用到的JS表单验证代码(包括例子)
Nov 11 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 Javascript
JS实现网页滚动条感应鼠标变色的方法
Feb 26 Javascript
jQuery图片渐变特效的简单实现
Jun 25 Javascript
判断输入的字符串是否是日期格式的简单方法
Jul 11 Javascript
深入理解bootstrap框架之第二章整体架构
Oct 09 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
Dec 14 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
Feb 13 Javascript
ES6中的Promise代码详解
Oct 09 Javascript
Vue瀑布流插件的使用示例
Sep 19 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
Jul 31 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
ExtJS下grid的一些属性说明
2009/12/13 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
JS实现继承的几种常用方式示例
2019/06/22 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
python实现文件快照加密保护的方法
2015/06/30 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
python 爬虫请求模块requests详解
2020/12/04 Python
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
医学专业毕业生个人的求职信
2013/12/04 职场文书
库房主管岗位职责
2013/12/31 职场文书
企业申诉管理制度
2014/01/30 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
就业协议书范本
2014/10/08 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
教师读书笔记
2015/06/29 职场文书
2016暑期社会实践新闻稿
2015/11/25 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL