Questo codice non funziona in Internet Explorer. Qualche alternativa?
"abcde".includes("cd")
Questo codice non funziona in Internet Explorer. Qualche alternativa?
"abcde".includes("cd")
Risposte:
String.prototype.includes
mentre scrivi, non è supportato in Internet Explorer (o Opera).
Invece puoi usare String.prototype.indexOf
. #indexOf
restituisce l'indice del primo carattere della sottostringa se è nella stringa, altrimenti restituisce -1
. (Molto simile all'equivalente Array)
var myString = 'this is my string';
myString.indexOf('string');
// -> 11
myString.indexOf('hello');
// -> -1
MDN ha un polyfill per l' includes
utilizzo indexOf
: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill
MODIFICA: Opera supporta includes
dalla versione 28 .
EDIT 2: le versioni correnti di Edge supportano il metodo. (a partire dal 2019)
Boolean
, possiamo(myString.indexOf('string') > -1) // to get a boolean true or false
O semplicemente inseriscilo in un file Javascript e buona giornata :)
String.prototype.includes = function (str) {
var returnValue = false;
if (this.indexOf(str) !== -1) {
returnValue = true;
}
return returnValue;
}
for...in
, itererà String.prototype.includes
se è definito in questo modo.
return this.indexOf(str) !== -1;
include () non è supportato dalla maggior parte dei browser. Le tue opzioni possono essere utilizzate
-polyfill da MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes
o da usare
-indice di()
var str = "abcde";
var n = str.indexOf("cd");
Che ti dà n = 2
Questo è ampiamente supportato.
for...in
! , itererà String.prototype.includes
se lo definisci in questo modo.
Problema:
Prova a eseguire di seguito (senza soluzione) da Internet Explorer e guarda il risultato.
console.log("abcde".includes("cd"));
Soluzione:
Ora esegui sotto la soluzione e controlla il risultato
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"));
Questo potrebbe essere migliore e più breve:
function stringIncludes(a, b) {
return a.indexOf(b) >= 0;
}
Ho avuto lo stesso problema lavorando in Angular 5. Per farlo funzionare direttamente senza scrivere un polyfill da soli, aggiungi la seguente riga al file polyfills.ts:
import "core-js/es7/array"
Inoltre, la tsconfig.json
sezione lib potrebbe essere rilevante:
"lib": [
"es2017",
"dom"
],
Per reagire:
import 'react-app-polyfill/ie11';
import 'core-js/es5';
import 'core-js/es6';
import 'core-js/es7';
Risoluzione del problema per - include (), find () e così via ..
Se vuoi continuare a usare Array.prototype.include()
in javascript puoi usare questo script:
github-script-ie-include
che converte automaticamente la funzione include () nella funzione match () se rileva IE.
Un'altra opzione è usare sempre ilstring.match(Regex(expression))
Per me funziona:
function stringIncludes(a, b) {
return a.indexOf(b) !== -1;
}
Puoi fare lo stesso con !! e ~ operatori
var myString = 'this is my string';
!!~myString.indexOf('string');
// -> true
!!~myString.indexOf('hello');
// -> false
ecco la spiegazione dei due operatori (!! e ~)
Quale è !! (non non) operatore in JavaScript?
https://www.joezimjs.com/javascript/great-mystery-of-the-tilde/