👋 Symbol.match
1. Well-Known Symbol
-
Well-Known Symbol을 지원하는 String 메소드
match()
replace()
search()
split()
-
String.prototype.match()
- 문자열에 패턴을 매치하고
- 매치된 결과를 배열로 반환
const result = 'Sports'.match(/s/); console.log(result); // [s] // 1. 문자열 "Sports"에 패턴 /s/를 매치합니다. 처음 S는 대문자이므로 매치가 되지 않지만 끝 s는 소문자이므로 매치가 됨 // 2. 매치된 결과를 배열로 반환
2. Symbol.match()
-
Symbol.match()
- 개발자 코드를 함수 블록에 작성
String.prototype.match()
대신에Symbol.match()
대신에Symbol.match()
가 실행됨
const sports = { base: 'ball', [Symbol.match](value) { return this.base.indexOf(value) < 0 ? '없음' : '있음'; }, }; console.log('al'.match(sports)); // 있음 // 1. 'ball'에 'al'이 있으면 '있음'을 반환하고 없으면 '없음'을 반환함 // 2. 'al'.match(sports) // 3. sports 오브젝트에서 Symbol.match 작성 체크 없으면 String.prototype.match()를 호출하고 있으면 Symbol.match()를 호출 함 // 4. Symbol.match(value)를 호출하면서 'al'를 파라미터 값으로 넘겨 줌
-
Symbol.match = false
//
를 패턴으로 인식하지 않고 문자열로 인식
try { '/book/'.startsWith(/book/); } catch { console.log('정규 표현식으로 처리'); } let check = /book/; check[Symbol.match] = false; console.log('/book/'.startsWith(check)); // 1. 파라미터 /book/을 패턴으로 처리 함, 정규 표현식을 사용할 수 없으므로 에러 발생 // 2. check[Symbol.match] = false; 정규 표현식으로 인식하지 않도록 설정 // 3. "/book/".startWith(check) 파라미터 check 값을 문자열로 인식 함 // 4. endsWith()도 값음 // 실행 결과 // 정규 표현식으로 처리 // true
- 메소드를 오버라이드 하는 것이므로 메소드의 시맨틱은 유지해야 함