.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 досі не підтримує його
Піотрек Грицюк

Відповіді:


131

String.prototype.includes , як ви пишете, не підтримується в Internet Explorer (або Opera).

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

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

EDIT: Opera підтримує includesвід версії 28 .

EDIT 2: Поточні версії Edge підтримують метод. (станом на 2019 рік)


Чи є () функція, яка не підтримується 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

або використовувати

-indexof ()

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

Що дає n = 2

Це широко підтримується.


Якщо ви використовуєте polyfill від 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;
}

IEO не підтримується IE
Some_Dude

1
Він прекрасно працює в IE11. Можливо, це не в IE10, але навряд чи люди досі використовують цю версію.
Андрій

3

У мене була така ж проблема під час роботи в Angular 5. Для того, щоб змусити її працювати безпосередньо, не записуючи polyfill самостійно, просто додайте наступний рядок у файл polyfills.ts:

import "core-js/es7/array"

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

"lib": [
  "es2017",
  "dom"
],

Ти, мій друг, - цілком рятівник!
CodeMan03

2

Для реакції:

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

Вирішення проблеми - включає (), find () тощо.


1

Якщо ви хочете продовжувати використовувати Array.prototype.include()в javascript, ви можете використовувати цей скрипт: github-script-ie-include, який автоматично перетворює функцію include () у match (), якщо виявить IE.

Інший варіант - це використання завждиstring.match(Regex(expression))



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.