.includes () nie działa w przeglądarce Internet Explorer


105

Ten kod nie działa w przeglądarce Internet Explorer. Jakaś alternatywa?

"abcde".includes("cd")

33
Dwa lata później IE nadal go nie obsługuje.
nu everest

4
Czekanie, aż IE się poprawi, jest jak ... czekanie, aż IE się poprawi.
Rob_M

1
@nueverest Masz na myśli 3 lata, prawda? : D
Josh

2
Ktoś wyświadczy wszystkim przysługę i usunie repozytorium (a) dla IE. Po prostu to zakończ.
zero_cool

kolejne 2 lata - IE nadal tego nie obsługuje
Piotrek Hryciuk

Odpowiedzi:


132

String.prototype.includes jak piszesz, nie jest obsługiwany w przeglądarce Internet Explorer (ani Opera).

Zamiast tego możesz użyć String.prototype.indexOf. #indexOfzwraca indeks pierwszego znaku podciągu, jeśli znajduje się on w ciągu, w przeciwnym razie zwraca -1. (Podobnie jak odpowiednik Array)

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

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

MDN ma wypełnienie do includesużycia indexOf: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill

EDYCJA: Opera obsługuje includesod wersji 28 .

EDYCJA 2: Obecne wersje Edge obsługują tę metodę. (stan na 2019)


Czy include () jest jedyną funkcją, która nie jest obsługiwana przez IE? Czy istnieją inne funkcje maszynopisu lub JavaScript, które nie są obsługiwane przez IE?
Abdullah Feroz,

10
Jeśli potrzebujemy Boolean, możemy(myString.indexOf('string') > -1) // to get a boolean true or false
Akash

32

Lub po prostu umieść to w pliku Javascript i życzę miłego dnia :)

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

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

  return returnValue;
}

Jeśli używasz tego polyfill, nie iteruj swojego ciągu z for...in, będzie iterował, String.prototype.includesjeśli jest zdefiniowany w ten sposób.
Patrick Roberts,

10
Krótsza wersja:return this.indexOf(str) !== -1;
Andrew

1
Dla tablic: Array.prototype.includes = function (elt) {return this.indexOf (elt)! == -1; }
LePatay,

9

include () nie jest obsługiwana przez większość przeglądarek. Masz opcje do użycia

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

lub do użycia

-indeks()

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

Co daje n = 2

Jest to szeroko obsługiwane.


Jeśli używasz polyfill z MDN, nie powtarzaj swojego ciągu for...in! , będzie iterować, String.prototype.includesjeśli zdefiniujesz to w ten sposób.
Patrick Roberts,

6

Problem:

Spróbuj uruchomić poniżej (bez rozwiązania) z Internet Explorera i zobacz wynik.

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

Rozwiązanie:

Teraz uruchom poniższe rozwiązanie i sprawdź wynik

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

Ten może być lepszy i krótszy:

function stringIncludes(a, b) {
    return a.indexOf(b) >= 0;
}

indexOf nie jest obsługiwana przez IE
Some_Dude

1
Działa doskonale w IE11. Może tak nie jest w IE10, ale obecnie mało kto używa tej wersji.
Andrew,

3

Miałem ten sam problem podczas pracy w Angular 5. Aby działał bezpośrednio bez samodzielnego pisania polyfillu, wystarczy dodać następującą linię do pliku polyfills.ts:

import "core-js/es7/array"

tsconfig.jsonIstotna może być również sekcja lib:

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

Ty, mój przyjacielu, jesteś kompletnym ratownikiem!
CodeMan03

2

Aby zareagować:

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

Rozwiązywanie problemów dla - obejmuje (), znajdź () i tak dalej.


1

Jeśli chcesz nadal używać Array.prototype.include()w javascript, możesz użyć tego skryptu: github-script-ie-include Ten automatycznie konwertuje funkcję include () na funkcję match (), jeśli wykryje IE.

Inną opcją jest zawsze użyciestring.match(Regex(expression))



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.