ECMA Script 6부터 새롭게 추가된 원시값이다. 심볼은 자기 자신을 제외한 그 어떤 값과도 다른 유일무이한 값이다.
Symbol()은 호출할 때마다 새로운 값을 만든다.
var sym1 = Symbol();
var sym2 = Symbol();
console.log(sym1 === sym2); // false
또한 Symbol()로부터 반환되는 모든 심볼값은 고유하다. 심볼 값은 객체 프로퍼티에 대한 식별자로 사용될 수 있다.
var NONE = Symbol('none');
var BLACK = Symbol('black');
var WHITE = Symbol('white');
cosole.log(NONE, BLACK, WHITE); // Symbol(none) Symbol(black) Symbol(white)
Symbol.for(key) 메소드는 전역 레지스트리에서 해당 키로 존재하는 심볼을 찾는다. 없으면 전역 심볼 레지스트리에 해당 키로 새로운 심볼을 만들어준다.
Symbol.for('foo'); // 새로운 전역심볼 생성
Symbol.for('foo'); // 이미 만들어진 심볼을 검색
console.log(Symbol.for('bar') === Symbol.for('bar')); // true
console.log(Symbol('bar') === Symbol('bar')); // false
// 키는 설명하는데 쓰이기도 한다.
var sym = Symbol.for('mario');
sym.toString(); // "Symbol(mario)"
Symbol.keyFor(sym) 메소드는 심볼에 대한 전역 심볼 레스트리에서 키값을 반환한다.
const globalSym = Symbol.for('foo'); // global symbol
console.log(Symbol.keyFor(globalSym)); // expected output: "foo"
템플릿이란 일부만 변경해서 반복하거나 재사용할 수 있는 틀을 말한다. 템플릿 리터럴을 사용하면 표현식의 값을 문자열에 추가하거나 여러 줄의 문자열을 표현할 수 있다.
템플릿 리터럴은 백틱 (``) 을 이용한다. 또한 플레이스 홀더를 이용하여 표현식을 넣을 수 있는데, 이는 $와 중괄호( $ {expression} ) 로 표기할 수 있다. 플레이스 홀더 안에서의 표현식과 그 사이의 텍스트는 함께 함수로 전달된다.
console.log(`string text line 1
string text line 2`);
var a = 2, b = 3;
console.log(`${a} + ${b} = ${a+b}`); // 2 + 3 = 5;
var now = new Date();
console.log(`오늘은 ${now.getMonth()+1} 월 ${now.getDate()} 일 입니다.`); // 오늘은 4월 6일입니다.
문자열 리터럴에서 줄 바꿈 문자를 표현할 때는 이스케이프 시퀀스 (\n)을 사용했지만, 템플릿 리터럴을 사용하면 일반적인 줄 바꿈 문자를 사용할 수 있다.
이스케이프 시퀀스 문자를 그대로 출력하려면 String.raw() 메서드를 사용하면 된다.
var str = String.raw`Hi\n${2+3}!`;
console.log(str); // Hi\n5!
[MDN - Symbol] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol)
[MDN - Template literals] (https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Template_literals)