Подтвердить что ты не робот

JavaScript endsWith не работает в IEv10?

Я пытаюсь сравнить две строки в JavaScript с помощью endsWith(), например

var isValid = string1.endsWith(string2);

Он отлично работает в Google Chrome и Mozilla. Когда приходит в IE, он бросает консольную ошибку следующим образом

SCRIPT438: Object doesn't support property or method 'endsWith' 

Как я могу его решить?

4b9b3361

Ответ 1

Метод endsWith() не поддерживается в IE. Проверьте совместимость браузера здесь.

Вы можете использовать опцию polyfill, взятую из документации MDN:

if (!String.prototype.endsWith) {
  String.prototype.endsWith = function(searchString, position) {
      var subjectString = this.toString();
      if (typeof position !== 'number' || !isFinite(position) 
          || Math.floor(position) !== position || position > subjectString.length) {
        position = subjectString.length;
      }
      position -= searchString.length;
      var lastIndex = subjectString.indexOf(searchString, position);
      return lastIndex !== -1 && lastIndex === position;
  };
}

Ответ 2

Я нашел самый простой ответ,

Все, что вам нужно, это определить прототип

 if (!String.prototype.endsWith) {
   String.prototype.endsWith = function(suffix) {
     return this.indexOf(suffix, this.length - suffix.length) !== -1;
   };
 }

Ответ 3

Как правило, неправильная практика продлить прототип собственного JavaScript-объекта. См. Здесь - Почему распространение родных объектов на плохую практику?

Вы можете использовать простую проверку, которая будет работать в кросс-браузере:

var isValid = (string1.lastIndexOf(string2) == (string1.length - string2.length))

Ответ 4

Реакция на старый вопрос: Разработка альтернативы для endsWith() в IE11.

Чтобы избежать этого string1 = "a", string2 = "bc"; вернул бы true:

var isValid = (string1.lastIndexOf(string2) == (string1.length - string2.length) && string1.lastIndexOf(string2) >= 0);