.includes () não funciona no Internet Explorer

105

Este código não funciona no Internet Explorer. Alguma alternativa?

"abcde".includes("cd")
Carlosss
fonte
33
Dois anos depois, o IE ainda não o suporta.
nu everest
4
Esperar que o IE fique melhor é como ... esperar que o IE fique melhor.
Rob_M de
1
@nueverest Você quer dizer 3 anos certo? : D
Josh
2
Alguém faça um favor a todos e exclua o (s) repo (s) do IE. Apenas termine.
zero_cool
mais 2 anos - o IE ainda não o suporta
Piotrek Hryciuk

Respostas:

131

String.prototype.includes enquanto você escreve, não é compatível com o Internet Explorer (ou Opera).

Em vez disso, você pode usar String.prototype.indexOf. #indexOfretorna o índice do primeiro caractere da substring se estiver na string; caso contrário, retorna -1. (Muito parecido com o equivalente de Array)

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

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

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

EDIT: Opera suporta a includespartir da versão 28 .

EDIT 2: As versões atuais do Edge suportam o método. (a partir de 2019)

Phillip
fonte
Include () é a única função que não é suportada pelo IE? Ou há outras funções de texto digitado ou JavaScript que não são suportadas pelo IE?
Abdullah Feroz
10
Se precisarmos de um Boolean, podemos(myString.indexOf('string') > -1) // to get a boolean true or false
Akash
32

Ou apenas coloque isso em um arquivo Javascript e tenha um bom dia :)

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

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

  return returnValue;
}
Prasun
fonte
Se você usar este polyfill, não itere sua string com for...in, ela irá iterar String.prototype.includesse for definida assim.
Patrick Roberts
10
Versão mais curta:return this.indexOf(str) !== -1;
Andrew
1
Para matrizes: Array.prototype.includes = function (elt) {return this.indexOf (elt)! == -1; }
LePatay
9

includes () não é compatível com a maioria dos navegadores. Suas opções são usar

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

ou para usar

-índice de()

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

O que dá a você n = 2

Isso é amplamente suportado.

deeveeABC
fonte
Se você usar o polyfill do MDN, não itere sua string com for...in! , ele irá iterar String.prototype.includesse você definir assim.
Patrick Roberts
6

Problema:

Experimente executar abaixo (sem solução) no Internet Explorer e veja o resultado.

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

Solução:

Agora execute a solução abaixo e verifique o 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
fonte
4

Este pode ser melhor e mais curto:

function stringIncludes(a, b) {
    return a.indexOf(b) >= 0;
}
Skwall
fonte
indexOf não é compatível com o IE
Some_Dude
1
Funciona perfeitamente bem no IE11. Talvez não no IE10, mas dificilmente existem pessoas que ainda usam essa versão hoje em dia.
Andrew
3

Eu tive o mesmo problema ao trabalhar no Angular 5. Para fazê-lo funcionar diretamente sem escrever um polyfill você mesmo, basta adicionar a seguinte linha ao arquivo polyfills.ts:

import "core-js/es7/array"

Além disso, a tsconfig.jsonseção lib pode ser relevante:

"lib": [
  "es2017",
  "dom"
],
Alexei
fonte
Você, meu amigo, é um salva-vidas completo!
CodeMan03
2

Para reagir:

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

Resolução de problemas para - inclui (), localizar () e assim por diante ..

Niket Bajaj
fonte
1

Se você quiser continuar usando o Array.prototype.include()em javascript, você pode usar este script: github-script-ie-include Isso converte automaticamente a função include () em match () se detectar o IE.

Outra opção é usar sempre ostring.match(Regex(expression))

mike Teixeira88
fonte
1

Funciona para mim:

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