Здесь все возможные способы (относительно) поиска строки
// 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: test
var string = "string to search for substring",
expr = /sea/; // no quotes here
expr.test(string);
// 4. string.match
var string = "string to search for substring",
expr = "/sea/";
string.match(expr);
// 5.string.search
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 включает, читайте комментарии.
В резюме:
если вам не нужны спички.=> Либо вам нужно регулярное выражение и поэтому используйте test .В противном случае es6 включает или indexOf .Тем не менее test vs indexOf близки.
И для включений vs indexOf:
Они кажутся одинаковыми: https://jsperf.com/array-indexof-vs-includes/4(если бы это было иначе, это было бы странно, они в основном выполняют то же самое, за исключением различий, которые они выставляют проверьте это )
И для моего собственного теста производительности.здесь это http://jsben.ch/fFnA0 Вы можете проверить это (это зависит от браузера) [протестировать несколько раз] здесь, как это выполнялось (многократный запуск indexOf и включает в себя один удар другому, и они близки).Так они одинаковы.[здесь используется та же тестовая платформа, что и в статье выше].
![enter image description here](https://i.stack.imgur.com/vuZez.png)
А здесь для длинного текставерсия (в 8 раз длиннее) http://jsben.ch/wSBA2
![enter image description here](https://i.stack.imgur.com/TJ9Cb.png)
Протестировано и Chrome, и Firefox, тоже самое.
Обратите внимание на jsben.ch нене обрабатывает переполнение памяти (или там правильно ограничивает. Оно не показывает никакого сообщения), поэтому результат может быть неправильным, если вы добавите более 8 дубликатов текста (8 работают хорошо).Но вывод для очень большого текста - все три работают одинаково.В противном случае для коротких indexOf и include одинаковы и тестировать немного медленнее.или Может быть таким же, как и в chrome (Firefox 60 медленнее).
Обратите внимание на jsben.ch: не волнуйтесь, если получите противоречивый результат.Попробуйте другое время и посмотрите, соответствует ли оно или нет.Измените браузер, иногда они просто работают неправильно.Ошибка или плохая обработка памяти.Или что-то еще.
ex:
![enter image description here](https://i.stack.imgur.com/c16yD.png)
Здесь также мой тест на jsperf (более подробная информация и обработка графиков для нескольких браузеров)
(верх хромированный)
обычный текст https://jsperf.com/indexof-vs-includes-vs-test-2019
резюме: включает и indexOf имеют одинаковую производительность.тест медленнее.
(кажется, что все три выполняют одно и то же в chrom)
Длинный текст (12время дольше обычного) https://jsperf.com/indexof-vs-includes-vs-test-2019-long-text-str/
резюме: Все три работают одинаково.(chrome и firefox) ![enter image description here](https://i.stack.imgur.com/Po3h1.png)
очень короткая строка https://jsperf.com/indexof-vs-includes-vs-test-2019-too-short-string/
резюме: включает и indexOf выполняют то же самое итест медленнее.
![enter image description here](https://i.stack.imgur.com/4trK7.png)
Примечание: о бенчмарке выше.Для очень короткой строки версия (jsperf) имела большую ошибку для chrome.Видя моими глазами.около 60 выборок было выполнено для обоих indexOf и включает в себя один и тот же способ (повторяется много раз).И тест немного меньше и так медленнее.не обманывайтесь неправильным графиком.Это ясно не так.Тот же тест работает нормально для Firefox, конечно, это ошибка.
Вот иллюстрация: (первое изображение было тестом на Firefox)
Ваааа.Внезапно indexOf стал суперменом.Но, как я уже сказал, я сделал тест и посмотрел на количество образцов, оно было около 60. И indexOf, и include, и они выполнили то же самое.Ошибка в jspref .За исключением этого (возможно, из-за проблемы, связанной с ограничением памяти) все остальное было согласованным, оно дает больше подробностей.И вы видите, сколько простых происходит в режиме реального времени.
Окончательное резюме
indexOf против включает => Та же производительность
test => может быть медленнее для коротких строк или текста.И то же самое для длинных текстов.И это имеет смысл для накладных расходов, которые добавляет двигатель регулярных выражений.В хроме это казалось совершенно неважным.