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 January 2020.
Thuộc tính dữ liệu tĩnh Symbol.match đại diện cho well-known symbol Symbol.match. Phương thức String.prototype.match() tra cứu symbol này trên đối số đầu tiên của nó cho phương thức dùng để khớp chuỗi đầu vào với đối tượng hiện tại. Symbol này cũng được dùng để xác định xem một đối tượng có nên được coi như biểu thức chính quy không.
Để biết thêm thông tin, xem RegExp.prototype[Symbol.match]() và String.prototype.match().
Try it
const regexp = /foo/;
// console.log('/foo/'.startsWith(regexp));
// 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
regexp[Symbol.match] = false;
console.log("/foo/".startsWith(regexp));
// Expected output: true
console.log("/baz/".endsWith(regexp));
// Expected output: false
Giá trị
Well-known symbol Symbol.match.
Property attributes of Symbol.match | |
|---|---|
| Writable | no |
| Enumerable | no |
| Configurable | no |
Mô tả
Hàm này cũng được dùng để xác định xem các đối tượng có hành vi của biểu thức chính quy không. Ví dụ, các phương thức String.prototype.startsWith(), String.prototype.endsWith() và String.prototype.includes() kiểm tra xem đối số đầu tiên của chúng có phải là biểu thức chính quy và sẽ ném TypeError nếu đúng. Bây giờ, nếu symbol match được đặt thành false (hoặc giá trị Falsy ngoại trừ undefined), nó cho biết đối tượng không được dùng như đối tượng biểu thức chính quy.
Ví dụ
>Đánh dấu RegExp là không phải regex
Đoạn mã sau sẽ ném TypeError:
"/bar/".startsWith(/bar/);
// Ném TypeError, vì /bar/ là biểu thức chính quy
// và Symbol.match không bị sửa đổi.
Tuy nhiên, nếu bạn đặt Symbol.match thành false, đối tượng sẽ được coi như không phải là đối tượng biểu thức chính quy. Các phương thức startsWith và endsWith sẽ không ném TypeError nữa.
const re = /foo/;
re[Symbol.match] = false;
"/foo/".startsWith(re); // true
"/baz/".endsWith(re); // false
Đặc tả
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-symbol.match> |