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 2020年1月.
Symbol.match は静的データプロパティで、ウェルノウンシンボルである Symbol.match を表します。String.prototype.match() メソッドは第 1 引数に対して、入力文字列と現在のオブジェクトとの照合に使われるメソッドを、このシンボルで探します。このシンボルは、オブジェクトが正規表現として扱われるべきかどうかを決定するためにも使用されます。
詳しくは、RegExp.prototype[Symbol.match]() および String.prototype.match() を参照してください。
試してみましょう
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
値
ウェルノウンシンボル Symbol.match です。
Symbol.match のプロパティ属性 | |
|---|---|
| 書込可能 | 不可 |
| 列挙可能 | 不可 |
| 設定可能 | 不可 |
解説
この関数は、オブジェクトが正規表現の動作をするかどうかを識別するためにも使用されます。たとえば、String.prototype.startsWith(), String.prototype.endsWith(), String.prototype.includes() メソッドは、最初の引数が正規表現であるかどうかを確認し、正規表現である場合は TypeError が発生します。ここで、match シンボルが false(または偽値、ただし undefined でないもの)に設定されている場合、そのオブジェクトが正規表現オブジェクトとして使用されることを意図していないことを示します。
例
>isRegExp チェックを無効にする
以下のコードは TypeError を投げます。
"/bar/".startsWith(/bar/);
// TypeError が発生。/bar/ が正規表現であり、
// Symbol.match が変更されていないため。
ただし、Symbol.match を false に設定すると、オブジェクトが正規表現オブジェクトではないことを示します。結果として、startsWith と endsWith メソッドは、TypeError を発生させません。
const re = /foo/;
re[Symbol.match] = false;
"/foo/".startsWith(re); // true
"/baz/".endsWith(re); // false
仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-symbol.match> |
ブラウザーの互換性
Loading…