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
を投げます。
"/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 Language Specification # sec-symbol.match |
ブラウザーの互換性
BCD tables only load in the browser