.includes () ne fonctionne pas dans Internet Explorer


105

Ce code ne fonctionne pas dans Internet Explorer. Une alternative?

"abcde".includes("cd")

33
Deux ans plus tard, IE ne le prend toujours pas en charge.
nu everest

4
Attendre que IE s'améliore, c'est comme ... attendre que IE s'améliore.
Rob_M

1
@nueverest Vous voulez dire 3 ans, non? : D
Josh

2
Quelqu'un rend service à tout le monde et supprime le (s) dépôt (s) pour IE. Arrêtez-le.
zero_cool

encore 2 ans - IE ne le supporte toujours pas
Piotrek Hryciuk

Réponses:


132

String.prototype.includes est, au fur et à mesure que vous écrivez, non pris en charge dans Internet Explorer (ou Opera).

Au lieu de cela, vous pouvez utiliser String.prototype.indexOf. #indexOfrenvoie l'index du premier caractère de la sous-chaîne s'il est dans la chaîne, sinon il retourne -1. (Tout comme l'équivalent Array)

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

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

MDN a un polyfill pour includesutiliser indexOf: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill

EDIT: Opera prend includesen charge à partir de la version 28 .

EDIT 2: les versions actuelles d'Edge prennent en charge la méthode. (à partir de 2019)


Include () est-elle la seule fonction qui n'est pas prise en charge par IE? Ou il existe d'autres fonctions dactylographiées ou JavaScript qui ne sont pas prises en charge par IE?
Abdullah Feroz

10
Si nous avons besoin d'un Boolean, nous pouvons(myString.indexOf('string') > -1) // to get a boolean true or false
Aakash

32

Ou mettez-le simplement dans un fichier Javascript et passez une bonne journée :)

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

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

  return returnValue;
}

Si vous utilisez ce polyfill, n'itérez pas votre chaîne avec for...in, elle itérera String.prototype.includessi elle est définie comme ceci.
Patrick Roberts

10
Version plus courte:return this.indexOf(str) !== -1;
Andrew

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

9

includes () n'est pas pris en charge par la plupart des navigateurs. Vos options sont soit d'utiliser

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

ou utiliser

-Indice de()

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

Ce qui vous donne n = 2

Ceci est largement soutenu.


Si vous utilisez le polyfill de MDN, n'itérez pas votre chaîne avec for...in! , il itérera String.prototype.includessi vous le définissez comme ça.
Patrick Roberts

6

Problème:

Essayez d'exécuter ci-dessous (sans solution) à partir d'Internet Explorer et voyez le résultat.

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

Solution:

Maintenant, exécutez la solution ci-dessous et vérifiez le résultat

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

Celui-ci peut être meilleur et plus court:

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

indexOf n'est pas pris en charge par IE
Some_Dude

1
Cela fonctionne parfaitement bien dans IE11. Peut-être que ce n'est pas le cas dans IE10, mais il n'y a guère de gens qui utilisent encore cette version de nos jours.
Andrew

3

J'ai eu le même problème en travaillant dans Angular 5. Afin de le faire fonctionner directement sans écrire vous-même un polyfill, ajoutez simplement la ligne suivante au fichier polyfills.ts:

import "core-js/es7/array"

De plus, la tsconfig.jsonsection lib pourrait être pertinente:

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

Vous mon ami êtes une bouée de sauvetage complète!
CodeMan03

2

Pour réagir:

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

Résolution des problèmes pour - includes (), find (), etc.


1

Si vous souhaitez continuer à utiliser Array.prototype.include()en javascript, vous pouvez utiliser ce script: github-script-ie-include qui convertit automatiquement la fonction include () en fonction match () si elle détecte IE.

Une autre option consiste à utiliser toujours lestring.match(Regex(expression))


1

Ça marche pour moi:

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.