.include () no funciona en Internet Explorer

105

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

"abcde".includes("cd")
Carlosss
fuente
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)

Phillip
fuente
¿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;
}
Prasun
fuente
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"));

Joe
fuente
4

Este puede ser mejor y más corto:

function stringIncludes(a, b) {
    return a.indexOf(b) >= 0;
}
Skwall
fuente
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"
],
Alexei
fuente
¡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.

niket bajaj
fuente
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))

mikeTeixeira88
fuente
1

Esto funciona para mi:

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