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 指定了匹配的是正则表达式而不是字符串。String.prototype.match() 方法会调用此函数。

尝试一下

描述

此函数还用于标识对象是否具有正则表达式的行为。比如, String.prototype.startsWith()String.prototype.endsWith()String.prototype.includes() 这些方法会检查其第一个参数是否是正则表达式,是正则表达式就抛出一个TypeError。现在,如果 match symbol 设置为 false(或者一个 假值),就表示该对象不打算用作正则表达式对象。

Symbol.match 的属性特性
可写
可枚举
可配置

示例

禁止表达式检查

下面代码会抛出一个 TypeError

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

// Throws TypeError,因为 /bar/ 是一个正则表达式
// 且 Symbol.match 没有修改。

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

js
var 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

参见