Ce code ne fonctionne pas dans Internet Explorer. Une alternative?
"abcde".includes("cd")
Ce code ne fonctionne pas dans Internet Explorer. Une alternative?
"abcde".includes("cd")
Réponses:
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
. #indexOf
renvoie 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 includes
utiliser indexOf
: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill
EDIT: Opera prend includes
en charge à partir de la version 28 .
EDIT 2: les versions actuelles d'Edge prennent en charge la méthode. (à partir de 2019)
Boolean
, nous pouvons(myString.indexOf('string') > -1) // to get a boolean true or false
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;
}
for...in
, elle itérera String.prototype.includes
si elle est définie comme ceci.
return this.indexOf(str) !== -1;
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.
for...in
! , il itérera String.prototype.includes
si vous le définissez comme ça.
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"));
Celui-ci peut être meilleur et plus court:
function stringIncludes(a, b) {
return a.indexOf(b) >= 0;
}
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.json
section lib pourrait être pertinente:
"lib": [
"es2017",
"dom"
],
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.
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))
Ça marche pour moi:
function stringIncludes(a, b) {
return a.indexOf(b) !== -1;
}
Vous pouvez faire la même chose avec !! et ~ opérateurs
var myString = 'this is my string';
!!~myString.indexOf('string');
// -> true
!!~myString.indexOf('hello');
// -> false
voici l'explication des deux opérateurs (!! et ~)
Quel est le !! (pas non) opérateur en JavaScript?
https://www.joezimjs.com/javascript/great-mystery-of-the-tilde/