.includes () funktioniert nicht in Internet Explorer

103

Dieser Code funktioniert im Internet Explorer nicht. Irgendeine Alternative?

"abcde".includes("cd")
Carlosss
quelle
32
Zwei Jahre später unterstützt IE es immer noch nicht.
Nu Everest
4
Warten, bis der IE besser wird, ist wie ... darauf zu warten, dass der IE besser wird.
Rob_M
1
@nueverest Du meinst 3 Jahre richtig? : D
Josh
2
Jemand tut jedem einen Gefallen und löscht die Repos für den IE. Beende es einfach.
zero_cool
weitere 2 Jahre - IE unterstützt es immer noch nicht
Piotrek Hryciuk

Antworten:

130

String.prototype.includes wird beim Schreiben in Internet Explorer (oder Opera) nicht unterstützt.

Stattdessen können Sie verwenden String.prototype.indexOf. #indexOfGibt den Index des ersten Zeichens der Teilzeichenfolge zurück, wenn er sich in der Zeichenfolge befindet. Andernfalls wird er zurückgegeben -1. (Ähnlich wie das Array-Äquivalent)

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

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

MDN verfügt über eine Polyfüllung für die includesVerwendung von indexOf: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill

BEARBEITEN: Opera unterstützt includesab Version 28 .

EDIT 2: Aktuelle Versionen von Edge unterstützen die Methode. (Stand 2019)

Phillip
quelle
Ist include () die einzige Funktion, die vom IE nicht unterstützt wird? Oder gibt es andere Typoskript- oder JavaScript-Funktionen, die vom IE nicht unterstützt werden?
Abdullah Feroz
10
Wenn wir eine brauchen Boolean, können wir(myString.indexOf('string') > -1) // to get a boolean true or false
Akash
32

Oder legen Sie dies einfach in eine Javascript-Datei und haben einen guten Tag :)

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

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

  return returnValue;
}
Prasun
quelle
Wenn Sie diese Polyfüllung verwenden, iterieren Sie Ihre Zeichenfolge nicht mit for...in, sie wird wiederholt, String.prototype.includeswenn sie wie folgt definiert ist.
Patrick Roberts
10
Kürzere Version:return this.indexOf(str) !== -1;
Andrew
1
Für Arrays: Array.prototype.includes = function (elt) {return this.indexOf (elt)! == -1; }
LePatay
9

include () wird von den meisten Browsern nicht unterstützt. Sie können entweder verwenden

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

oder zu verwenden

-Index von()

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

Welches gibt Ihnen n = 2

Dies wird weitgehend unterstützt.

deeveeABC
quelle
Wenn Sie die Polyfüllung von MDN verwenden, iterieren Sie Ihren String nicht mit for...in! wird es wiederholt, String.prototype.includeswenn Sie es so definieren.
Patrick Roberts
6

Problem:

Versuchen Sie, im Internet Explorer unten (ohne Lösung) zu arbeiten, und sehen Sie sich das Ergebnis an.

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

Lösung:

Führen Sie nun die folgende Lösung aus und überprüfen Sie das Ergebnis

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"));

Joe
quelle
4

Dieser kann besser und kürzer sein:

function stringIncludes(a, b) {
    return a.indexOf(b) >= 0;
}
Skwall
quelle
indexOf wird von IE
Some_Dude
1
In IE11 funktioniert es einwandfrei. Vielleicht nicht in IE10, aber es gibt heutzutage kaum noch Leute, die diese Version verwenden.
Andrew
3

Ich hatte das gleiche Problem bei der Arbeit in Angular 5. Damit es direkt funktioniert, ohne selbst eine Polyfüllung zu schreiben, fügen Sie einfach die folgende Zeile zur Datei polyfills.ts hinzu:

import "core-js/es7/array"

Auch der tsconfig.jsonAbschnitt lib könnte relevant sein:

"lib": [
  "es2017",
  "dom"
],
Alexei
quelle
Du mein Freund bist ein Lebensretter!
CodeMan03
2

Für reagieren:

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

Problemlösung für - include (), find () usw.

niket bajaj
quelle
1

Wenn Sie das Array.prototype.include()in Javascript weiterhin verwenden möchten, können Sie dieses Skript verwenden: github-script-ie-include Konvertiert automatisch include () in die Funktion match (), wenn IE erkannt wird.

Eine andere Option ist immer diestring.match(Regex(expression))

mikeTeixeira88
quelle
1

Für mich geht das:

function stringIncludes(a, b) {
      return a.indexOf(b) !== -1;
}
Abel Valdez
quelle