.includes () non funziona in Internet Explorer


105

Questo codice non funziona in Internet Explorer. Qualche alternativa?

"abcde".includes("cd")

33
Due anni dopo IE ancora non lo supporta.
nu everest

4
Aspettare che IE migliori è come ... aspettare che IE migliori.
Rob_M

1
@nueverest Intendi 3 anni giusto? : D
Josh

2
Qualcuno fa un favore a tutti e cancella i repo per IE. Basta finirla.
zero_cool

altri 2 anni - IE ancora non lo supporta
Piotrek Hryciuk il

Risposte:


131

String.prototype.includes mentre scrivi, non è supportato in Internet Explorer (o Opera).

Invece puoi usare String.prototype.indexOf. #indexOfrestituisce l'indice del primo carattere della sottostringa se è nella stringa, altrimenti restituisce -1. (Molto simile all'equivalente Array)

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

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

MDN ha un polyfill per l' includesutilizzo indexOf: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill

MODIFICA: Opera supporta includesdalla versione 28 .

EDIT 2: le versioni correnti di Edge supportano il metodo. (a partire dal 2019)


Include () l'unica funzione che non è supportata da IE? Oppure ci sono altre funzioni dattiloscritte o JavaScript che non sono supportate da IE?
Abdullah Feroz

10
Se abbiamo bisogno di un Boolean, possiamo(myString.indexOf('string') > -1) // to get a boolean true or false
Akash

32

O semplicemente inseriscilo in un file Javascript e buona giornata :)

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

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

  return returnValue;
}

Se usi questo polyfill, non iterare la tua stringa con for...in, itererà String.prototype.includesse è definito in questo modo.
Patrick Roberts

10
Versione più breve:return this.indexOf(str) !== -1;
Andrew

1
Per gli array: Array.prototype.includes = function (elt) {return this.indexOf (elt)! == -1; }
LePatay

9

include () non è supportato dalla maggior parte dei browser. Le tue opzioni possono essere utilizzate

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

o da usare

-indice di()

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

Che ti dà n = 2

Questo è ampiamente supportato.


Se usi il polyfill di MDN, non iterare la stringa con for...in! , itererà String.prototype.includesse lo definisci in questo modo.
Patrick Roberts

6

Problema:

Prova a eseguire di seguito (senza soluzione) da Internet Explorer e guarda il risultato.

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

Soluzione:

Ora esegui sotto la soluzione e controlla il risultato

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

Questo potrebbe essere migliore e più breve:

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

indexOf non è supportato da IE
Some_Dude

1
Funziona perfettamente bene in IE11. Forse non è così in IE10, ma al giorno d'oggi difficilmente ci sono ancora persone che usano quella versione.
Andrew

3

Ho avuto lo stesso problema lavorando in Angular 5. Per farlo funzionare direttamente senza scrivere un polyfill da soli, aggiungi la seguente riga al file polyfills.ts:

import "core-js/es7/array"

Inoltre, la tsconfig.jsonsezione lib potrebbe essere rilevante:

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

Tu amico mio sei un vero salvavita!
CodeMan03

2

Per reagire:

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

Risoluzione del problema per - include (), find () e così via ..


1

Se vuoi continuare a usare Array.prototype.include()in javascript puoi usare questo script: github-script-ie-include che converte automaticamente la funzione include () nella funzione match () se rileva IE.

Un'altra opzione è usare sempre ilstring.match(Regex(expression))


1

Per me funziona:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.