简单谈谈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实例教程(19) 使用HoTMetal(3)
Dec 23 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
Sep 16 Javascript
Javascript实现滑块滑动改变值的实现代码
Apr 12 Javascript
javascript 小数取整简单实现方式
May 30 Javascript
使用js dom和jquery分别实现简单增删改
Sep 11 Javascript
Bootstrap每天必学之面板
Nov 30 Javascript
jquery mobile界面数据刷新的实现方法
May 28 Javascript
select2 ajax 设置默认值,初始值的方法
Aug 09 Javascript
jQuery zTree树插件的使用教程
Aug 16 jQuery
解决$store.getters调用不执行的问题
Nov 08 Javascript
JavaScript Tab菜单实现过程解析
May 13 Javascript
Vue实现移动端拖拽交换位置
Jul 29 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错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
PHP安全性漫谈
2012/06/28 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
PHP中require和include路径问题详解
2014/12/25 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
浅谈ECMAScript6新特性之let、const
2017/08/02 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
Python中super函数的用法
2017/11/17 Python
快速了解Python开发中的cookie及简单代码示例
2018/01/17 Python
python实现装饰器、描述符
2018/02/28 Python
通过shell+python实现企业微信预警
2019/03/07 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
轻松制作精彩视频:Animoto
2018/09/19 全球购物
PHP笔试题
2012/02/22 面试题
建筑专业自荐信
2013/10/18 职场文书
简历自荐信
2013/12/02 职场文书
工作表扬信的范文
2014/01/10 职场文书
销售业务员岗位职责
2014/01/29 职场文书
学生安全承诺书
2014/05/22 职场文书
治安消防安全责任书
2014/07/23 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
介绍信范文大全
2015/05/07 职场文书
2015年暑期见闻
2015/07/14 职场文书
python简单验证码识别的实现过程
2021/06/20 Python
MySQL数据库事务的四大特性
2022/04/20 MySQL