.include () no funciona en Internet Explorer


105

Este código no funciona en Internet Explorer. ¿Alguna alternativa?

"abcde".includes("cd")

33
Dos años después, IE todavía no lo admite.
nu everest

4
Esperar a que IE mejore es como ... esperar a que IE mejore.
Rob_M

1
@nueverest ¿Quieres decir 3 años, verdad? : D
Josh

2
Alguien haga un favor a todos y elimine los repositorios de IE. Sólo termínelo.
zero_cool

otros 2 años - IE todavía no lo admite
Piotrek Hryciuk

Respuestas:


131

String.prototype.includes mientras escribe, no es compatible con Internet Explorer (u Opera).

En su lugar, puede utilizar String.prototype.indexOf. #indexOfdevuelve el índice del primer carácter de la subcadena si está en la cadena; de lo contrario, devuelve -1. (Muy parecido al equivalente de Array)

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

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

MDN tiene un polyfill para includesusar indexOf: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill

EDITAR: Opera admite a includespartir de la versión 28 .

EDITAR 2: las versiones actuales de Edge admiten el método. (a partir de 2019)


¿Es include () la única función que no es compatible con IE? ¿O hay otras funciones mecanografiadas o JavaScript que no son compatibles con IE?
Abdullah Feroz

10
Si necesitamos un Boolean, podemos(myString.indexOf('string') > -1) // to get a boolean true or false
Akash

32

O simplemente ponga esto en un archivo Javascript y tenga un buen día :)

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

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

  return returnValue;
}

Si usa este polyfill, no itere su cadena con for...in, iterará String.prototype.includessi se define así.
Patrick Roberts

10
Versión más corta:return this.indexOf(str) !== -1;
Andrew

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


6

Problema:

Intente ejecutar a continuación (sin solución) desde Internet Explorer y vea el resultado.

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

Solución:

Ahora ejecute la siguiente solución y verifique el resultado

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

Este puede ser mejor y más corto:

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

indexOf no es compatible con IE
Some_Dude

1
Funciona perfectamente bien en IE11. Tal vez no sea así en IE10, pero casi no hay personas que sigan usando esa versión hoy en día.
Andrew

3

Tuve el mismo problema cuando trabajaba en Angular 5. Para que funcione directamente sin escribir un polyfill usted mismo, simplemente agregue la siguiente línea al archivo polyfills.ts:

import "core-js/es7/array"

Además, la tsconfig.jsonsección lib puede ser relevante:

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

¡Tú, amigo mío, eres un completo salvavidas!
CodeMan03

2

Para reaccionar:

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

Resolución de problemas para: incluye (), buscar (), etc.


1

Si desea seguir usando Array.prototype.include()en javascript, puede usar este script: github-script-ie-include Eso convierte automáticamente la función include () en la función match () si detecta IE.

Otra opción es usar siempre elstring.match(Regex(expression))


1

Esto funciona para mi:

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.