내부 key 값 걱정없이 추가 프로퍼티를 만들수 있는 고유의 값 만들 때 이용
객체 프로퍼티 키 일 수도 있다
Symbol로 추가하면 이름 충돌 걱정 하지않고 새 속성 계속 추가가능
var includes = Symbol('즐거운 자바스크립트');
// Symbol은 객체는 아니다
Array.prototype[includes] = function () {
return console.log('its Symbol');
}
var arr = [1, 2, 3];
arr.includes(1); // true
arr['includes'](1); // true
// arr 기본 메서드 동작
arr[includes](); // its Symbol // Symbol('즐거운 자바스크립트'); 가 Key로 들어감
// 충돌하지 않고 Symbol객체로 만든 key 동작
갑자기 prototype에 같은 이름을 가지는 함수가 새 ES 버전에 생기는 문제 피할 수 있다
→ name 충돌방지
well-known Symbol 통해 core method 접근 가능
자바스크립트는 자동으로 몇몇 Symbol 변수를 생성하고 global Symbol 객체에 할당한다
Symbol.match
Symbol.replace
Symbol.search
Symbol.iterator
Symbol.split
등등 이 있습니다.'hyunwoo'.search(/woo/); // 4
// 실행시 'hyunwoo'가 String 객체로 변환되고 내부의 search 메서드가
// Symbol.search메서드에 접근