在这里,所有可能的方式(相对)搜索字符串
// 1.包含(在ES6中引入)
var string = "string to search for substring",
substring = "sea";
string.includes(substring);
// 2. string.indexOf
var string = "string to search for substring",
substring = "sea";
string.indexOf(substring) !== -1;
// 3. RegExp:测试
var string = "string to search for substring",
expr = /sea/;
expr.test(string);
// 4. string.match
var string = "string to search for substring",
expr = "/sea/";
string.match(expr);
// 5。字符串搜索
var string = "string to search for substring",
expr = "/sea/";
string.search(expr);
这是一个src:https://koukia.ca/top-6-ways-to-search-for-a-string-in-javascript-and-performance-benchmarks-ce3e9b81ad31
基准似乎专门针对es6 include而扭曲,请阅读注释。
在简历中:
如果您不需要比赛。=>或者您需要正则表达式,然后使用test。否则,es6 include或indexOf。仍在测试vs indexOf接近。
对于包括vs indexOf:
他们似乎是相同的:https://jsperf.com/array-indexof-vs-includes/4 (如果它是不同的,将是奇怪的,他们大多是执行相同的,除了他们公开的分歧检查此)
并进行我自己的基准测试。此处是http://jsben.ch/fFnA0。
您可以对其进行测试(取决于浏览器)[测试多次],在这里它的性能如何(多次运行indexOf并包括一个节拍,另一个节拍,并且它们很接近)。所以他们是一样的。[此处使用与以上文章相同的测试平台]。
这里是长文本版本(长8倍)
http://jsben.ch/wSBA2
同时测试了chrome和Firefox。
请注意,jsben.ch无法处理内存溢出(或有正确的限制。它不会显示任何消息),因此,如果您添加了8个以上的文本重复项(8个工作正常),结果可能会出错。但是结论是,对于非常大的文本,这三个函数都以相同的方式执行。否则,对于短的indexOf和include是相同的,并且测试要慢一些。或可以与Chrome中的外观相同(Firefox 60较慢)。
注意jsben.ch:如果结果不一致,请不要惊慌。尝试其他时间,看看是否一致。更改浏览器,有时它们只是完全错误地运行。错误或错误的内存处理。或者其他的东西。
例如:
这也是我在jsperf上的基准测试(更好的详细信息,并为多个浏览器处理图表)
(顶部是铬)
普通文本
https://jsperf.com/indexof-vs-includes-vs-test-2019
简历: include和indexOf具有相同的性能。测试较慢。
(似乎所有三个在色度上都表现相同)
长文本(比正常时间长12倍)
https://jsperf.com/indexof-vs-includes-vs-test-2019-long-text-str/
简历: 这三者的表现相同。(Chrome和Firefox)
非常短字符串
https://jsperf.com/indexof-vs-includes-vs-test-2019-too-short-string/
简历:包括和的indexOf执行相同和测试慢。
注意:关于上述基准。对于很短的弦版本(jsperf),chrome有很大的错误。以我的眼神来看。两个indexOf都运行了大约60个样本,并且包含相同的方式(重复了很多次)。并测试得少一点,那么慢。不要被错误的图表所迷惑。显然是错误的。对于Firefox,相同的测试工作还可以,当然这是一个错误。
插图如下:(第一个图像是对Firefox的测试)
waaaa。突然indexOf成为超人。但是正如我所说,我进行了测试,并查看了大约60个样本。indexOf和include以及它们执行的都是相同的。jspref上的错误。除了这一点(可能是由于内存限制相关的问题)之外,其余所有内容都是一致的,它提供了更多细节。您会实时看到多少简单的事情发生。
最终简历
indexOf vs includes =>性能相同
测试=>对于短字符串或文本可能会更慢。与长文本相同。对于正则表达式引擎增加的开销,这是有意义的。在Chrome中,这似乎没有任何关系。
str.indexOf("xyz")
应该与/xyz/.test(str)