Как проверить конец строки в JavaScript
Узнайте несколько способов проверки, заканчивается ли строка определенным символом в JavaScript. Сравните методы endsWith(), slice(), charAt() и другие подходы с примерами кода и оценкой производительности.
Как проверить, заканчивается ли строка определённым символом в JavaScript?
Пример: у меня есть строка
var str = "mystring#";
Я хочу узнать, заканчивается ли эта строка на #. Как это можно проверить?
- Существует ли метод
endsWith()в JavaScript? - Одно из решений, которое я придумал, — это взять длину строки, получить последний символ и проверить его.
Является ли это лучшим способом или есть другие варианты?
Метод endsWith() — это самый простой способ проверить, заканчивается ли строка определенным символом в JavaScript. Для вашего примера var str = "mystring#"; можно использовать str.endsWith("#"), который возвращает true, если строка заканчивается на #, и false в противном случае. Этот метод был введен в ES2015 и является рекомендуемым подходом для современного JavaScript-разработки.
Содержание
- Использование метода endsWith()
- Совместимость с браузерами и полифилы
- Альтернативные методы для проверки одного символа
- Сравнение производительности
- Лучшие практики и рекомендации
Использование метода endsWith()
Метод endsWith() — это встроенный метод строк в JavaScript, который определяет, заканчивается ли строка символами указанной строки. Этот метод чувствителен к регистру и возвращает логическое значение.
Базовый синтаксис
str.endsWith(searchString[, length])
searchString: Символы, которые нужно найти в конце строкиlength(необязательный): Позиция, на которой нужно завершить поиск (по умолчаниюstr.length)
Примеры для вашего случая использования
var str = "mystring#";
// Проверяем, заканчивается ли строка на '#'
console.log(str.endsWith("#")); // true
// Проверяем, заканчивается ли строка определенными символами
console.log(str.endsWith("g#")); // true
console.log(str.endsWith("ing#")); // true
console.log(str.endsWith("mystring")); // false
Работа с разными регистрами
Поскольку endsWith() чувствителен к регистру, вам нужно вручную обрабатывать сравнения без учета регистра:
var str = "MyString#";
// Сравнение с учетом регистра
console.log(str.endsWith("#")); // true
console.log(str.endsWith("#")); // true
// Сравнение без учета регистра
console.log(str.toLowerCase().endsWith("#".toLowerCase())); // true
Совместимость с браузерами и полифилы
Метод endsWith() был введен в ES2015/ES6, что означает, что он может быть недоступен в старых браузерах, таких как Internet Explorer или более старых версиях Safari и браузеров Android.
Проверка поддержки
if (!String.prototype.endsWith) {
console.log('Метод endsWith() не поддерживается в этом браузере');
}
Добавление полифила
Для более широкой поддержки браузеров вы можете добавить полифил в свой код:
// Если String.prototype.endswith не определен, добавляем его
if (!String.prototype.endsWith) {
String.prototype.endsWith = function(search, this_len) {
if (this_len === undefined || this_len > this.length) {
this_len = this.length;
}
return this.substring(this_len - search.length, this_len) === search;
};
}
Этот полифил гарантирует, что ваш код будет работать последовательно в разных браузерных средах.
Альтернативные методы для проверки одного символа
Хотя endsWith() является идеальным выбором, существует несколько альтернативных методов, которые можно использовать для проверки, заканчивается ли строка определенным символом, особенно если вам нужна более широкая совместимость с браузерами.
1. Использование метода charAt()
var str = "mystring#";
// Получаем последний символ и сравниваем
console.log(str.charAt(str.length - 1) === "#"); // true
2. Использование метода substring()
var str = "mystring#";
// Получаем последний символ с помощью substring
console.log(str.substring(str.length - 1) === "#"); // true
// Или для нескольких символов
console.log(str.substring(str.length - 1) === "#"); // true
3. Использование метода slice()
var str = "mystring#";
// Получаем последний символ с помощью slice
console.log(str.slice(-1) === "#"); // true
// Получаем последние N символов
console.log(str.slice(-2) === "g#"); // true
4. Использование метода lastIndexOf()
var str = "mystring#";
// Проверяем, находится ли последнее вхождение в конце
console.log(str.lastIndexOf("#") === str.length - 1); // true
5. Использование регулярных выражений
var str = "mystring#";
// Проверяем, заканчивается ли строка на '#'
console.log(/#$/.test(str)); // true
// Проверяем, заканчивается ли строка определенными символами
console.log(/g#$/.test(str)); // true
Сравнение методов для проверки одного символа
| Метод | Синтаксис | Плюсы | Минусы |
|---|---|---|---|
endsWith() |
str.endsWith("#") |
Наиболее читаемый, ясный намерение | Не поддерживается в очень старых браузерах |
charAt() |
str.charAt(str.length - 1) === "#" |
Хорошая поддержка браузерами | Более многословный |
substring() |
str.substring(str.length - 1) === "#" |
Хорошая поддержка браузерами | Более многословный |
slice() |
str.slice(-1) === "#" |
Хорошая поддержка браузерами, отрицательная индексация | Немного менее читабельно для начинающих |
lastIndexOf() |
str.lastIndexOf("#") === str.length - 1 |
Хорошая поддержка браузерами | Более сложная логика |
RegExp |
/#$/.test(str) |
Гибкое сопоставление с образцом | Избыточность для простых проверок |
Сравнение производительности
Согласно результатам тестирования производительности из исследований, разные подходы показывают различные характеристики производительности:
Рейтинг производительности (от самого быстрого к самому медленному)
- Метод slice(-1) — Обычно показывает хорошую производительность для проверки одного символа
- Метод substring() — Хорошая производительность, особенно для одного символа
- Метод charAt() — Стабильная производительность в разных браузерах
- Метод lastIndexOf() — Немного медленнее из-за вычисления индекса
- Метод endsWith() — Оптимизирован в современных JavaScript-движках
- Регулярные выражения — Могут быть медленнее для простых проверок символов
Практические соображения по производительности
Для большинства практических приложений различия в производительности между этими методами незначительны, если вы не выполняете миллионы операций. Читаемость и поддерживаемость вашего кода должны быть вашими основными соображениями.
Вот простой тест производительности, который вы можете запустить:
var str = "mystring#";
var iterations = 1000000;
// Тест производительности endsWith
var start = performance.now();
for (var i = 0; i < iterations; i++) {
str.endsWith("#");
}
var end = performance.now();
console.log('endsWith:', end - start + 'ms');
// Тест производительности slice
start = performance.now();
for (var i = 0; i < iterations; i++) {
str.slice(-1) === "#";
}
end = performance.now();
console.log('slice:', end - start + 'ms');
Лучшие практики и рекомендации
Когда использовать endsWith()
- Современные веб-приложения: Если вы ориентируетесь на современные браузеры или можете использовать инструменты трансляции, такие как Babel,
endsWith()является лучшим выбором благодаря своей читаемости. - Командные проекты: При работе в командах
endsWith()четко выражает намерение. - Читаемость кода: Само название метода делает код самодокументированным.
Когда использовать альтернативы
- Поддержка старых браузеров: Если вам нужно поддерживать старые браузеры, такие как IE11, рассмотрите возможность использования альтернатив или добавления полифила.
- Проверка одного символа: Для проверки только последнего символа
slice(-1)илиcharAt()могут быть более прямыми. - Критически важный код по производительности: В приложениях, где производительность критична, тестируйте разные подходы для вашего конкретного случая использования.
Рекомендуемая стратегия реализации
// Проверяем, поддерживается ли endsWith, если нет, добавляем полифил
if (!String.prototype.endsWith) {
String.prototype.endsWith = function(search, this_len) {
if (this_len === undefined || this_len > this.length) {
this_len = this.length;
}
return this.substring(this_len - search.length, this_len) === search;
};
}
// Теперь вы можете безопасно использовать endsWith() во всех средах
function endsWithCharacter(str, char) {
return str.endsWith(char);
}
// Примеры использования
var str = "mystring#";
console.log(endsWithCharacter(str, "#")); // true
console.log(endsWithCharacter(str, "!")); // false
Крайние случаи, которые следует учитывать
-
Пустые строки:
javascript"".endsWith("#"); // false "".endsWith(""); // true -
Строка поиска длиннее целевой:
javascript"a".endsWith("ab"); // false (не вызывает ошибку) -
Специальные символы:
javascript"string with spaces ".endsWith(" "); // true "path/to/file".endsWith("/"); // true -
Символы Unicode:
javascript"café".endsWith("é"); // true "👨👩👧👦".endsWith("👦"); // false (сложный эмодзи)
Практический пример: Валидация расширения файла
function validateFileExtension(filename, extensions) {
// Преобразуем массив расширений в нижний регистр для сравнения без учета регистра
var lowerExtensions = extensions.map(ext => ext.toLowerCase());
// Получаем расширение файла из имени файла
var extension = filename.toLowerCase().slice(filename.lastIndexOf('.'));
return lowerExtensions.includes(extension);
}
// Использование
var filename = "document.pdf";
console.log(validateFileExtension(filename, ['.pdf', '.doc', '.txt'])); // true
console.log(validateFileExtension(filename, ['.jpg', '.png'])); // false
Заключение
-
Используйте
endsWith()для современного JavaScript-разработки — это наиболее читаемый и поддерживаемый способ проверки, заканчивается ли строка определенными символами. -
Учитывайте совместимость с браузерами — если вам нужно поддерживать старые браузеры, используйте полифил или выбирайте альтернативные методы, такие как
slice(-1)илиcharAt(). -
Для проверки одного символа несколько подходов работают хорошо —
slice(-1),charAt(str.length - 1)иsubstring(str.length - 1)обеспечивают хорошую производительность и поддержку браузерами. -
Различия в производительности обычно незначительны — если вы не обрабатываете миллионы строк, выбирайте метод, который делает ваш код наиболее читаемым и поддерживаемым.
-
Правильно обрабатывайте крайние случаи — учитывайте пустые строки, специальные символы и Unicode при реализации функций сравнения строк в ваших приложениях.
Метод endsWith() остается предпочтительным выбором для большинства JavaScript-приложений, когда позволяет совместимость с браузерами, предлагая лучший баланс читаемости, производительности и выразительности.
Источники
- String.prototype.endsWith() - JavaScript | MDN
- string - endsWith in JavaScript - Stack Overflow
- JavaScript String endsWith() Method - W3Schools
- JavaScript String endsWith() Method - GeeksforGeeks
- JavaScript String endsWith() Method - Scaler Topics
- Two ways to confirm the ending of a String in JavaScript - freeCodeCamp
- JavaScript: String endsWith() method - TechOnTheNet
- JavaScript String endsWith() Method - Vultr Docs
- JavaScript endsWith function not working - Stack Overflow
- How to check if a string ends with another string in JavaScript - CoreUI
- Top Methods to Check If a String Ends With a Specific Character in JavaScript - SQLPeY
- JavaScript String endsWith() Method - JavaScript Tutorial
- String.prototype.substring() - JavaScript | MDN
- JavaScript endsWith: The Superhero Method Transforming String Manipulation - NHOSI