今天碰到将字符串拆分成数组进行操作的情况,发现如果判断下字符串里有没有需要拆分的特定字符,就可以省下拆分的操作。理所当然用了indexOf。

Javascript一直在更新,比如字符串就有了一个includes方法用来判断是否包含某子串。includes方法用起来要比indexOf简洁。

然后如果要判断一个字符串是否包含好几个不同的子串,自然而然会想到正则。正则在这种情况下是代码最少的,比如:

1
/o|u|l/i.test('Hello world')
,甚至可以忽略大小写

google了一下,发现已经有相关的bench测试了:http://jsbench.github.io/#a4612afd0cd26e911ee8

可以发现indexOf比其余方式也就快个几十上百倍。当然,大家都很快,只是indexOf最快

如果考虑到判断多个子串的情况,我们可以把以上bench里的代码修改一下,把正则改复杂,然后indexOf改成多个,再次运行,你会发现:差距更大了

简单地说,就是复杂的正则,意味着更复杂的处理逻辑,效率也呈几何下降;多个indexOf效率下降很少

当然,即使最慢的正则,也足够平常使用了。不过要注意,避免用在循环里,以及缓存正则不要每次都声明。要考虑高效的话,indexOf吊打其余的,但是如果要写好多个indexOf也让人有点烦,有需要的话可以自己造个函数