由indexOf引发的一系列探究和思考

先写下我对indexOf这个函数是怎么遭遇的,之前处理要将后台返回带逗号的字符串去掉,例如“a,b,c,d”,想到过这样处理,将字符串装换成数组,再组合成字符串,代码如下:

var str = ",1,2,3,4,4,5,6,6,";

str.split(",").join(" ");
(若有人还有更好的思路,请留言交流)

也处理过这样的问题,点击会将手机号码中间4为加密,显示为*,思路也是这样,用的数组splice方法。

好的,可以回正题了,看代码时发现数组也可以用indexOf方法,而且跟字符串用的方式一样,于是我在控制台验证了:

var str = "abcdefg";str.indexOf("c");
2
var arr = ["1","a","d","3"];arr.indexOf("a");
1
成功没有报错,我查w3c的indexOf的定义 ,javaScript String对象  indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

1,难道数组也有indexOf的方法?2,难道数组执行indexOf 的时候先转成字符串,然后在执行方法的?我将疑问发到技术群里问了下高手,幻天芒 给的解释,string的indexOf和array的indexOf,只是名字相同的不同方法。[ Dying In The Sun ]  给的解释,es3只有string.prototype.indexOf,es5才扩展出array.prototype.indexOf。es3实现的时候肯定仅在string上实现,es5的实现肯定是在Array上实现扩展到string上啊 。
好的,这下清楚了,String和Array都有这个方法,名字一样而已。于是我百度下Array的indexOf方法(w3c已经不能信了),然后在https://msdn.microsoft.com/zh-cn/library/bb383831.aspx 找到了,这个给出示例,
  var a = [‘red‘, ‘blue‘, ‘green‘, ‘blue‘];

var myFirstIndex = Array.indexOf(a, "blue");
好的高兴的去控制台执行了,
WTF?这是怎么回事,然后又请教高手了,clumiere建议  Array.prototype.indexOf.call(a,"blue");拿这个执行就对了,接着就想为什么会这样呢,于是打印Array的对象和原型对象,
Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性)组成的数组。

发现Array里面是没有的,prototype里面是有的,Array.prototype.indexOf.call(a,"blue")与a.indexOf("blue")是一样的效果。
尼玛,经人提醒JScript与javascript是不一样的语言,javascript的基础方法还是要去mdn看的, https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf  这个才是对的。
那有没有想过Array.prototype.indexOf.call(a,"blue")与a.indexOf("blue")两种写法有设么区别呢,好问题,那如果a是一个类似数组的,没有indexOf这个方法,但是又想用这个方法的时候,第一种写法就派上用场了,http://segmentfault.com/q/1010000000125575  这个里面有个类似的slice方法,对此做了解答。
总结,以后这些基础性的内容要去mdn上去看,这个里面的比较新,比较全。
时间: 2024-11-06 09:51:27

由indexOf引发的一系列探究和思考的相关文章

运算顺序引发的一系列有趣问题

问题:采用递归方法计算给定整型数组元素之和. 以下给出几种递归算法的实现: 1 int sum1(int a[], int n) 2 { 3 if(n > 0) 4 return a[n-1] + sum1(a, n-1); 5 else 6 return 0; 7 } 8 9 int sum2(int a[], int n) 10 { 11 if(n > 0) 12 return a[n-1] + sum2(a, --n); 13 else 14 return 0; 15 } 16 17 i

在centos服务器上配置gitlab钩子引发的一系列问题

为了给公司的服务器上搭建gitlab环境并且配置钩子(实现在本地git push之后服务器自动git pull),整了好久,最后终于把问题解决了,下面是记录安装gitlab之后引发的一系列问题: 首先搭建gitlab是参考了http://www.linuxidc.com/Linux/2016-06/131992.htm这篇文章,使用的是bitnami制作的一键安装包,下载下来的是run格式的文件,需要先给这个文件执行权限: chmod +x filename filename是这个文件的名字 安

装hadoop引发的一系列事件

为了装hadoop,先要装hadoop.然后用wubi装ubuntu 10.10,接着开始装hadoop,但是装hadoop要先装ssh等一系列软件,用命令apt-get install openssh-server发现没有相应软件,接着更新源,即使网上说的速度最快的源163也无效,然后查了下好像10.10不是LTS版,不再支持.那么就装高点版本的吧,但是高点版本(12.10,14.0等)的下载完成后,点击wubi安装,总是要在线下载,估计要1,2个小时.于是就刻盘吧,光盘?还是U盘吧,接着下载

[原创]ios单元测试引发的一系列研究(一)

最近在研究单元测试,希望引入一个好用的单元测试工具,提高开发团队的产出质量. 不过我本人对单元测试没有什么知识,所以,笼统的从ios上的测试开始研究. 现在想想,本文的主题monkeytalk好像与单元测试木有关系.orz 目前可用的测试框架虽然没有其他开发平台的那样自成体系,也还算是百花齐放. ------------------------------------------------------- 老大自然是OCUnit+XCTool和GHUnit+OCMock.这两种都是需要自己写te

一个贴子引发的对回调的思考

一个贴子引发的对回调的思考 网上看到一个贴子:http://topic.csdn.net/u/20080728/20/d60f719a-c103-44b8-8d0c-bc1c818b768a.html 觉得蛮有意思,在学习的工程中又引申出不少东西,真有趣!! 定义在类中方法之外的内部类分为实例内部类和静态内部类. 实例内部类自动持有外部类的实例的引用,即可以访问外部类的所有变量: 静态内部类可以直接访问外部类的静态成员: 定义在方法中的内部类叫局部内部类,该类只能访问被final修饰的局部变量和

Navicat连接mysql出现2003——can't connect to mysql server on localhost(10061)引发的关于人生的思考)

(0)目录 走,是一辈子,不走,也是一辈子(程序猿之路) Navicat连接mysql出现2003--can't connect to mysql server on localhost(10061) 一:起因 (0)最近由于病了一场,闲暇时间(即生病期间)一直思考如下问题: 思考一:如何做一名合格的程序猿,怎么才能成为一名名副其实的程序猿? 思考二:还有就是到底,值不值得熬夜加班去搞研发(或转型或做相对轻松的其它IT岗位~~~对于这个问题,我一时无法给出答案,希望各位帮我分析一下,不胜感激!!

由“Beeline连接HiveServer2后如何使用指定的队列(Yarn)运行Hive SQL语句”引发的一系列思考

背景 我们使用的HiveServer2的版本为0.13.1-cdh5.3.2,目前的任务使用Hive SQL构建,分为两种类型:手动任务(临时分析需求).调度任务(常规分析需求),两者均通过我们的Web系统进行提交.以前两种类型的任务都被提交至Yarn中一个名称为“hive”的队列,为了避免两种类型的任务之间相互受影响以及并行任务数过多导致“hive”队列资源紧张,我们在调度系统中构建了一个任务缓冲区队列,所有被提交的任务(手动任务.调度任务)并不会直接被提交至集群,而是提交至这个缓冲区队列中,

抛砖引玉之一 —— 由12306引发的抢购模式的思考

本文不涉及数据库原理,不会简单的对比oracle.mysql.sqlserver这些RDBMS的优异(事实上也很难得出结论),只是基于个人观点引发的一点思考,欢迎拍砖: 一个话题总要有切入点,但这次的切入点显得有些突兀: 事实上,我们是从数据库的负载均衡问题聊起来的.前面的内容不再赘述,只是话题忽的引到12306订单系统如何应对大并发的问题上: 由于没有现成的资料,无法评论12306的应用以及数据库架构是否合理.不过从表象上可以猜到一些倪端: 表象:在春运期间,一般车票是提前N天开始预订,但在放

druid抛出的异常------javax.management.InstanceAlreadyExistsException引发的一系列探索

最近项目中有个定时任务的需求,定时检查mysql数据与etcd数据的一致性,具体实现细节就不说了,今天要说的就是实现过程中遇到了druid抛出的异常,以及解决的过程 异常 异常详细信息 五月 05, 2017 4:16:00 下午 com.alibaba.druid.proxy.DruidDriver warn 警告: register druid-driver mbean error javax.management.InstanceAlreadyExistsException: com.al