Symbol.match
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
Die statische Dateneigenschaft Symbol.match
repräsentiert das bekannte Symbol Symbol.match
. Die Methode String.prototype.match()
sucht dieses Symbol im ersten Argument, um die Methode zu finden, die eine Eingabestring gegen das aktuelle Objekt vergleicht. Dieses Symbol wird auch verwendet, um zu bestimmen, ob ein Objekt als RegExp behandelt werden soll.
Weitere Informationen finden Sie unter RegExp.prototype[Symbol.match]()
und String.prototype.match()
.
Probieren Sie es aus
const regexp1 = /foo/;
// console.log('/foo/'.startsWith(regexp1));
// Expected output (Chrome): Error: First argument to String.prototype.startsWith must not be a regular expression
// Expected output (Firefox): Error: Invalid type: first can't be a Regular Expression
// Expected output (Safari): Error: Argument to String.prototype.startsWith cannot be a RegExp
regexp1[Symbol.match] = false;
console.log("/foo/".startsWith(regexp1));
// Expected output: true
console.log("/baz/".endsWith(regexp1));
// Expected output: false
Wert
Das bekannte Symbol Symbol.match
.
Eigenschaften von Symbol.match | |
---|---|
Schreibbar | nein |
Aufzählbar | nein |
Konfigurierbar | nein |
Beschreibung
Diese Funktion wird auch verwendet, um zu identifizieren, ob Objekte das Verhalten von regulären Ausdrücken aufweisen. Beispielsweise überprüfen die Methoden String.prototype.startsWith()
, String.prototype.endsWith()
und String.prototype.includes()
, ob ihr erstes Argument ein regulärer Ausdruck ist, und werfen einen TypeError
, wenn sie es sind. Wenn das match
-Symbol auf false
(oder einen Falsy-Wert außer undefined
) gesetzt ist, zeigt es an, dass das Objekt nicht als reguläres Ausdrucksobjekt verwendet werden soll.
Beispiele
Ein RegExp als kein Regex kennzeichnen
Der folgende Code wird einen TypeError
werfen:
"/bar/".startsWith(/bar/);
// Throws TypeError, as /bar/ is a regular expression
// and Symbol.match is not modified.
Wenn Sie jedoch Symbol.match
auf false
setzen, wird das Objekt als kein reguläres Ausdrucksobjekt betrachtet. Die Methoden startsWith
und endsWith
werfen infolgedessen keinen TypeError
.
const re = /foo/;
re[Symbol.match] = false;
"/foo/".startsWith(re); // true
"/baz/".endsWith(re); // false
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-symbol.match |