.includes () не работает в Internet Explorer

105

Этот код не работает в Internet Explorer. Любая альтернатива?

"abcde".includes("cd")
Карлосс
источник
33
Два года спустя IE все еще не поддерживает его.
nu everest
4
Ждать, когда IE станет лучше, все равно что ... ждать, когда IE станет лучше.
Rob_M
1
@nueverest Вы имеете в виду 3 года, верно? : D
Джош
2
Кто-то сделает всем одолжение и удалите репо (а) для IE. Просто положи конец.
zero_cool
еще 2 года - IE до сих пор не поддерживает
Пётрек Грицук

Ответы:

132

String.prototype.includes , как вы пишете, не поддерживается в Internet Explorer (или Opera).

Вместо этого вы можете использовать String.prototype.indexOf. #indexOfвозвращает индекс первого символа подстроки, если он находится в строке, в противном случае возвращает -1. (Во многом как эквивалент Array)

var myString = 'this is my string';
myString.indexOf('string');
// -> 11

myString.indexOf('hello');
// -> -1

В MDN есть полифилл для includesиспользования indexOf: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill

РЕДАКТИРОВАТЬ: Opera поддерживает includesначиная с версии 28 .

РЕДАКТИРОВАТЬ 2: Текущие версии Edge поддерживают этот метод. (по состоянию на 2019 год)

Филипп
источник
Является ли include () единственной функцией, которая не поддерживается IE? Или есть другие функции машинописного текста или JavaScript, которые не поддерживаются IE?
Абдулла Фероз
10
Если нам понадобится Boolean, мы можем(myString.indexOf('string') > -1) // to get a boolean true or false
Аакаш
32

Или просто поместите это в файл Javascript и хорошего дня :)

String.prototype.includes = function (str) {
  var returnValue = false;

  if (this.indexOf(str) !== -1) {
    returnValue = true;
  }

  return returnValue;
}
Прасун
источник
Если вы используете этот полифилл, не повторяйте свою строку с помощью for...in, он будет повторяться, String.prototype.includesесли он определен таким образом.
Патрик Робертс,
10
Более короткая версия:return this.indexOf(str) !== -1;
Эндрю
1
Для массивов: Array.prototype.includes = function (elt) {return this.indexOf (elt)! == -1; }
LePatay
9

include () не поддерживается большинством браузеров. Ваши варианты - использовать

-polyfill из MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes

или использовать

-индекс()

var str = "abcde";
var n = str.indexOf("cd");

Что дает вам n = 2

Это широко поддерживается.

deeveeABC
источник
Если вы используете полифил из MDN, не повторяйте строку с помощью for...in! , он будет повторяться, String.prototype.includesесли вы определите его так.
Патрик Робертс
6

Проблема:

Попробуйте запустить ниже (без решения) из Internet Explorer и посмотрите результат.

console.log("abcde".includes("cd"));

Решение:

Теперь запустите ниже решение и проверьте результат

if (!String.prototype.includes) {//To check browser supports or not
  String.prototype.includes = function (str) {//If not supported, then define the method
    return this.indexOf(str) !== -1;
  }
}
console.log("abcde".includes("cd"));

Джо
источник
4

Этот может быть лучше и короче:

function stringIncludes(a, b) {
    return a.indexOf(b) >= 0;
}
Skwall
источник
indexOf не поддерживается IE
Some_Dude
1
Он отлично работает в IE11. Возможно, этого нет в IE10, но в наши дни вряд ли есть люди, которые все еще используют эту версию.
Эндрю
3

У меня была такая же проблема при работе в Angular 5. Чтобы он работал напрямую, без написания полифилла самостоятельно, просто добавьте следующую строку в файл polyfills.ts:

import "core-js/es7/array"

Также tsconfig.jsonможет быть актуален раздел lib:

"lib": [
  "es2017",
  "dom"
],
Алексей
источник
Вы, друг мой, настоящий паломник!
CodeMan03 08
2

Для реакции:

import 'react-app-polyfill/ie11';
import 'core-js/es5';
import 'core-js/es6';
import 'core-js/es7';

Решение проблемы для - includes (), find () и т. Д.

Никет Баджадж
источник
1

Если вы хотите продолжать использовать Array.prototype.include()в javascript, вы можете использовать этот скрипт: github-script-ie-include, который автоматически преобразует include () в функцию match (), если обнаруживает IE.

Другой вариант - всегда использоватьstring.match(Regex(expression))

mikeTeixeira88
источник
1

Меня устраивает:

function stringIncludes(a, b) {
      return a.indexOf(b) !== -1;
}
Абель Вальдес
источник