我正在处理 JavaScript 的性能问题。所以我只想问:检查一个字符串是否包含另一个子字符串的最快方法是什么(我只需要布尔值)?您能否提出您的想法和示例代码段?
原文由 Đinh Hồng Châu 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在处理 JavaScript 的性能问题。所以我只想问:检查一个字符串是否包含另一个子字符串的最快方法是什么(我只需要布尔值)?您能否提出您的想法和示例代码段?
原文由 Đinh Hồng Châu 发布,翻译遵循 CC BY-SA 4.0 许可协议
最快的
var string = "你好",
子串 = "lo";
string.includes(substring);
var string = "你好",
子串 = "lo";
string.indexOf(substring) !== -1;
原文由 Tính Ngô Quang 发布,翻译遵循 CC BY-SA 4.0 许可协议
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
你有三种可能:
indexOf
:includes
:正则表达式似乎更快(至少在 Chrome 10 中)。
性能测试——草垛
性能测试 - 大海捞针
**2011 年更新:**
不能肯定地说哪种方法更快。浏览器之间的差异是巨大的。虽然在 Chrome 10 中
indexOf
似乎更快,但在 Safari 5 中,indexOf
显然比任何其他方法都慢。你必须自己去看看并尝试。这取决于您的需求。例如 ,不区分大小写的 搜索使用正则表达式要快得多。
2018 年更新:
只是为了避免人们自己运行测试,以下是大多数常见浏览器的当前结果,百分比表示性能比下一个最快的结果(浏览器之间有所不同)有所提高:
Chrome: indexOf(快约 98%)
<-- wow
Firefox: 缓存的 RegExp(快约 18%)
IE11: 缓存的正则表达式(快约 10%)
边缘: indexOf(快约 18%)
Safari: 缓存的 RegExp(快约 0.4%)
请注意, 缓存的 RegExp 是:
var r = new RegExp('simple'); var c = r.test(str);
相对于:/simple/.test(str)