Javascript .replaceAll() ist kein Funktionstypfehler

Lesezeit: 4 Minuten

Benutzer-Avatar
pyknight202

Die Dokumentationsseite: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll

let string = ":insertx: :insertx: :inserty: :inserty: :insertz: :insertz:";
let newstring = string.replaceAll(":insertx:", 'hello!');

Wenn ich dies ausführe, erhalte ich Uncaught TypeError: string.replaceAll is not a function. Vielleicht verstehe ich falsch, was ein Prototyp ist, aber die Funktion scheint eine Zeichenfolgenmethode zu sein, die verwendet werden kann.

Ich verwende Chrome.

  • wo genau bist du auf die idee gekommen .replaceAll() ist eine String-Methode

    – Spitze

    9. Juli 2020 um 23:52 Uhr

  • den Beispielcode im Dokumentationslink und im Titel der Dokumentation

    – pyknight202

    9. Juli 2020 um 23:53 Uhr

  • replaceAll kommt in ein paar Monaten als native V8-String-Methode. im Moment ist es immer noch nicht verfügbar.

    – DedaDev

    9. Juli 2020 um 23:56 Uhr


  • Gehen Sie voran und Polyfill es

    – Aluan Haddad

    10. Juli 2020 um 0:45 Uhr

  • @Opcode es ist anscheinend neu (oder neu)

    – Spitze

    5. November 2020 um 12:44 Uhr

Benutzer-Avatar
Ungemindert

Verwenden replace mit einem regulären Ausdruck mit dem globalen Modifikator für bessere Browserunterstützung. (Überprüf den Browser-Kompatibilitätstabelle auf MDN um zu sehen, welche Version jedes Browsers begonnen hat, die zu unterstützen replaceAll Methode.)

let string = ":insertx: :insertx: :inserty: :inserty: :insertz: :insertz:";
let newstring = string.replace(/:insertx:/g, 'hello!');
console.log(newstring);

Für eine generischere Lösung können wir Metazeichen für reguläre Ausdrücke mit Escapezeichen versehen und die verwenden RegExp Konstrukteur. Sie könnten die Funktion auch hinzufügen String.prototype als Polyfill.

(Es ist notwendig, die zu ersetzende Zeichenfolge zu maskieren, damit Zeichen, die in regulären Ausdrücken eine besondere Bedeutung haben, wörtlich interpretiert werden, z . bezieht sich nur auf tatsächliche Punkte und nicht auf Zeichen.)

//Taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}
function replaceAll(str, match, replacement){
   return str.replace(new RegExp(escapeRegExp(match), 'g'), ()=>replacement);
}

console.log(replaceAll('a.b.c.d.e', '.', '__'));
console.log(replaceAll('a.b.c.d.e', '.', '$&'));

Eine spezifikationskonforme Zwischenlage kann gefunden werden hier.

.replaceAll wird ab Chrome 85 verfügbar sein. Die aktuelle Version ist 83.

Wenn Sie Google Chrome Canary (Version 86) herunterladen, können Sie sehen, dass Ihr Code einwandfrei läuft. Firefox ist auf Version 78 und seitdem .replaceAll seit Version 77 verfügbar ist, funktioniert es auch dort. Es funktioniert auch mit dem aktuellen Safari. Microsoft Edge hat es als nicht unterstützt.

Unterstützte Browserversionen finden Sie am Ende des Artikels zu Ihrer Frage.

Benutzer-Avatar
Patrick Mascari

Wenn Sie Ihren Chrome weder aktualisieren noch Reg-Ausdrücke verwenden möchten (da sie weniger leistungsfähig sind), können Sie auch Folgendes tun:

let string = ":insertx: :insertx: :inserty: :inserty: :insertz: :insertz:";
let newstring = string.split(":insertx:").join('hello!');

Und Sie können den String-Prototypen natürlich überall anbringen, wenn Sie möchten. Da das echte replaceAll jedoch mehr Funktionen enthält (unterstützt Regex), sind Sie stattdessen sicherer:

String.prototype.replaceAllTxt = function replaceAll(search, replace) { return this.split(search).join(replace); }

  • Genial. Dies hätte die akzeptierte Antwort sein sollen, da es auch die Lösung bietet und Kompatibilitätsprobleme vertuscht.

    – Ela Ale

    17. Dezember 2020 um 15:13 Uhr

Benutzer-Avatar
Amir Fo

Sie können es ganz einfach selbst definieren:

if(typeof String.prototype.replaceAll === "undefined") {
    String.prototype.replaceAll = function(match, replace) {
       return this.replace(new RegExp(match, 'g'), () => replace);
    }
}

Und benutze es:

"fafa".replaceAll("a", "o");
>>> fofo

Benutzer-Avatar
Mubashir Jamali

str.replaceAll Funktion wird in ES2021 ES12 hinzugefügt, deshalb ist sie in älteren Versionen von Browsern und nodejs nicht definiert.

Benutzer-Avatar
Lahori

Obwohl ein bisschen off-topic, aber ich bin hier für meinen Anwendungsfall gestolpert, der nicht aufgeführt ist, also ist hier für jemanden wie mich. Ich musste ein Wort verstecken, aber wenn es beginnt mit bestimmten Zeichen dh dev. Und es gibt Platzhalterzeichen * das hat mir dabei geholfen.

'Fullstack developer'.replace(/dev.*/g, '') // => Fullstack

Hinweis: Beachten Sie den Punkt.

Benutzer-Avatar
Jyotirmoy Upadhaya

Ich habe auch die gleichen Typfehlerprobleme mit “Alle ersetzen” erhalten. Ich habe es mit der Ersetzungsmethode durch einen regulären Ausdruck mit global gesetztem Flag gelöst.

let unformattedDate = "06=07=2022";
const formattedString = unformattedDate.replace(/=/g, ':');
console.log(formattedString);

1135810cookie-checkJavascript .replaceAll() ist kein Funktionstypfehler

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy