Symbol.match 指定了匹配的是正则表达式而不是字符串。String.prototype.match() 方法会调用此函数。

{{InteractiveExample("JavaScript Demo: Symbol.match")}}

```js interactive-example 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


## 描述 此函数还用于标识对象是否具有正则表达式的行为。比如, <code>String.prototype.startsWith()</code>,<code>String.prototype.endsWith()</code> 和 <code>String.prototype.includes()</code> 这些方法会检查其第一个参数是否是正则表达式,是正则表达式就抛出一个<code>TypeError</code>。现在,如果 `match` symbol 设置为 `false`(或者一个 {{Glossary("Falsy", "假值")}}),就表示该对象不打算用作正则表达式对象。 {{js_property_attributes(0,0,0)}} ## 示例 ### 禁止表达式检查 下面代码会抛出一个 <code>TypeError</code>: ```js "/bar/".startsWith(/bar/); // Throws TypeError,因为 /bar/ 是一个正则表达式 // 且 Symbol.match 没有修改。

但是,如果你将 Symbol.match 置为 false,使用 match 属性的表达式检查会认为该对象不是正则表达式对象。startsWithendsWith 方法将不会抛出 TypeError

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