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 September 2015.

Symbol.match は静的データプロパティで、ウェルノウンシンボルである Symbol.match を表します。String.prototype.match() メソッドは第 1 引数に対して、入力文字列と現在のオブジェクトとの照合に使われるメソッドを、このシンボルで探します。このシンボルは、オブジェクトが正規表現として扱われるべきかどうかを決定するためにも使用されます。

詳しくは、RegExp.prototype[Symbol.match]() および String.prototype.match() を参照してください。

試してみましょう

ウェルノウンシンボル Symbol.match です。

Symbol.match のプロパティ属性
書込可能不可
列挙可能不可
設定可能不可

解説

この関数は、オブジェクトが正規表現の動作をするかどうかを識別するためにも使用されます。たとえば、String.prototype.startsWith(), String.prototype.endsWith(), String.prototype.includes() メソッドは、最初の引数が正規表現であるかどうかを確認し、正規表現である場合は TypeError が発生します。ここで、match シンボルが false(または偽値、ただし undefined でないもの)に設定されている場合、そのオブジェクトが正規表現オブジェクトとして使用されることを意図していないことを示します。

isRegExp チェックを無効にする

以下のコードは TypeError を投げます。

js
"/bar/".startsWith(/bar/);

// TypeError が発生。/bar/ が正規表現であり、
// Symbol.match が変更されていないため。

ただし、Symbol.matchfalse に設定すると、オブジェクトが正規表現オブジェクトではないことを示します。結果として、startsWithendsWith メソッドは、TypeError を発生させません。

js
const re = /foo/;
re[Symbol.match] = false;
"/foo/".startsWith(re); // true
"/baz/".endsWith(re); // false

仕様書

Specification
ECMAScript Language Specification
# sec-symbol.match

ブラウザーの互換性

BCD tables only load in the browser

関連情報