Статьи

ES6 в действии: новые строковые методы — String.prototype. *

В моей предыдущей статье о методах массива ES6 я представил новые методы, доступные в ECMAScript 6, которые работают с типом Array . В этом руководстве вы узнаете о новых методах ES6, которые работают со строками: String.prototype.*

Мы разработаем несколько примеров и отметим доступные для них полифилы. Помните, что если вы хотите заполнить их все, используя одну библиотеку, вы можете использовать es6-shim Пола Миллера .

String.prototype.startsWith ()

Одна из наиболее часто используемых функций в каждом современном языке программирования — это проверка, начинается ли строка с данной подстроки. До ES6 у JavaScript не было такой функции, то есть вы должны были написать ее самостоятельно. Следующий код показывает, как разработчики обычно заполняют его:

 if (typeof String.prototype.startsWith !== 'function') { String.prototype.startsWith = function (str){ return this.indexOf(str) === 0; }; } 

Или, альтернативно:

 if (typeof String.prototype.startsWith !== 'function') { String.prototype.startsWith = function (str){ return this.substring(0, str.length) === str; }; } 

Эти фрагменты все еще действительны, но они не воспроизводят точно, что делает недавно доступный String.prototype.startsWith() . Новый метод имеет следующий синтаксис:

 String.prototype.startsWith(searchString[, position]); 

Вы можете видеть, что, кроме подстроки, он принимает второй аргумент. Параметр searchString указывает подстроку, которую вы хотите проверить, это начало строки. position указывает позицию, с которой начинается поиск. Значение по умолчанию для position равно 0. Методы возвращают true если строка начинается с указанной подстроки, и false противном случае. Помните, что метод чувствителен к регистру, поэтому «Hello» отличается от «hello».

Пример использования этого метода показан ниже:

 const str = 'hello!'; let result = str.startsWith('he'); // prints "true" console.log(result); // verify starting from the third character result = str.startsWith('ll', 2); // prints "true" console.log(result); 

Демонстрационная версия предыдущего кода показана ниже и также доступна на JSBin .

Метод поддерживается в Node и во всех современных браузерах, за исключением Internet Explorer. Если вам требуется поддержка старых браузеров, полифилл для этого метода можно найти на странице метода в MDN . Другой полифилл также был разработан Матиасом Биненсом.

String.prototype.endsWith ()

В дополнение к String.prototype.startsWith() , ECMAScript 6 представляет метод String.prototype.endsWith() . Он проверяет, что строка оканчивается заданной подстрокой. Синтаксис этого метода, показанный ниже, очень похож на String.prototype.startsWith() :

 String.prototype.endsWith(searchString[, position]); 

Как видите, этот метод принимает те же параметры, что и String.prototype.startsWith() , а также возвращает значения того же типа.

Разница в том, что параметр position позволяет вам искать внутри строки, как если бы строка была только этой длинной. Другими словами, если у нас есть строка house и мы вызываем метод с помощью 'house'.endsWith('us', 4) , мы получаем значение true , потому что у нас действительно есть строка hous (обратите внимание на отсутствующее “e”) ,

Пример использования этого метода показан ниже:

 const str = 'hello!'; const result = str.endsWith('lo!'); // prints "true" console.log(result); // verify as if the string was "hell" result = str.endsWith('lo!', 5); // prints "false" console.log(result); 

Демонстрационная версия предыдущего фрагмента приведена ниже и также доступна на сайте JSBin .

Метод поддерживается в Node и во всех современных браузерах, за исключением Internet Explorer. Если вам требуется поддержка старых браузеров, полифилл для этого метода можно найти на странице метода в MDN . Другой полифилл был разработан Матиасом Биненсом.

String.prototype.includes ()

Пока мы говорим о проверке, содержится ли одна строка в другой, позвольте мне познакомить вас с String.prototype.includes() . Он возвращает true если строка содержится в другом, независимо от того, где, и false противном случае.

Его синтаксис показан ниже:

 String.prototype.includes(searchString[, position]); 

Значение параметров такое же, как и для String.prototype.startsWith() , поэтому я не буду их повторять. Пример использования этого метода показан ниже:

 const str = ; let result = str.includes('Aurelio'); // prints "true" console.log(result); result = str.includes('Hello', 10); // prints "false" console.log(result); 

Вы можете найти живое демо ниже, а также как в JSBin .

String.prototype.includes() поддерживается в Node и во всех современных браузерах, за исключением Internet Explorer. Если вам требуется поддержка старых браузеров, как и в случае с другими методами, описанными в этом руководстве, вы можете найти полифилл, предоставленный Матиасом Биненсом (этот парень знает, как выполнять свою работу!), И другой в сети разработчиков Mozilla .

Примечание: до версии 48 Firefox использует нестандартное имя contains .

String.prototype.repeat ()

Давайте теперь перейдем к другому типу метода. String.prototype.repeat() — это метод, который возвращает новую строку, содержащую ту же строку, в которой она была вызвана, но повторяется указанное количество раз. Синтаксис этого метода следующий:

 String.prototype.repeat(times); 

Параметр times указывает, сколько раз строка должна быть повторена. Если вы передадите ноль, вы получите пустую строку, а если вы передадите отрицательное число или бесконечность, вы получите RangeError .

Пример использования этого метода показан ниже:

 const str = 'hello'; let result = str.repeat(3); // prints "hellohellohello" console.log(result); result = str.repeat(0); // prints "" console.log(result); 

Демонстрационная версия предыдущего кода показана ниже и также доступна на JSBin .

Метод поддерживается в Node и во всех современных браузерах, за исключением Internet Explorer. Если вам требуется поддержка старых браузеров, для этого метода доступны две полифилы: одна, разработанная Матиасом Биненсом, и другая в Mozilla Developer Network .

String.raw ()

Последний метод, который я хочу String.raw() в этом руководстве, — это String.raw() . Он определяется как функция тега шаблонных строк . Это интересно, потому что это своего рода замена шаблонным библиотекам, хотя я не уверен на 100%, что он может масштабироваться настолько, чтобы фактически заменить эти библиотеки. Тем не менее, идея в основном такая же, как мы скоро увидим. Он собирает строку и заменяет каждый заполнитель указанным значением.

Его синтаксис следующий (обратите внимание на галочки):

 String.raw`templateString` 

Параметр templateString представляет строку, содержащую шаблон для обработки.

Чтобы лучше понять эту концепцию, давайте рассмотрим конкретный пример:

 const name = ; const result = String.raw`Hello, my name is ${name}`;  

Демонстрационная версия предыдущего кода показана ниже и также доступна на JSBin .

Метод поддерживается в Node и во всех современных браузерах, за исключением Opera и Internet Explorer. Если вам требуется поддержка старых браузеров, вы можете использовать полифилл, такой как этот, доступный на npm .

Вывод

В этом руководстве вы узнали о нескольких новых методах, введенных в ECMAScript 6, которые работают со строками. Другими методами, которые мы не рассмотрели, являются String.fromCodePoint () , String.prototype.codePointAt () и String.prototype.normalize () . Надеюсь, вам понравилась статья, и вы продолжите следить за нашим каналом, чтобы больше узнать о ECMAScript 6.