Symbol

ES6 μ—μ„œ λ‚˜μ˜¨ μ›μ‹œ λ°μ΄ν„°ν˜• (Primitive DataType) 의 μΌμ’…μœΌλ‘œ 객체에 Unique ν•œ 속성을 λ§Œλ“€μ–΄ λ‹€λ₯Έ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ 좩동을 ν”Όν•˜κΈ° μœ„ν•¨μ΄λ‹€.

  • Undefined
  • Null
  • Boolean
  • Number
  • String
  • Object
  • Symbol

Syntax

Symbol([description]);
  • description
    • 선택적 (Optional) λ¬Έμžμ—΄λ‘œ 디버깅에 μ‚¬μš©ν•  수 μžˆλŠ” μ„€λͺ…이닀.
    • 자체적으둜 심볼에 μ ‘κ·Όν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©ν•  수 μ—†μŒ

Description

기본적으둜 μƒˆ μ›μ‹œ 심볼을 μƒμ„±ν•˜λ €λ©΄ μ•„λž˜μ™€ 같이 선택적 λ¬Έμžμ—΄κ³Ό ν•¨κ»˜ Symbol() 을 μ“°λ©΄ λœλ‹€.

var sym1 = Symbol();
var sym2 = Symbol('foo');
var sym3 = Symbol('foo');

맀번 μƒˆλ‘œμš΄ 심볼을 μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ— μ•„λž˜ 같이은 쑰건은 성립할 수 μ—†λ‹€.

console.log(Symbol('foo') === Symbol('foo'))      // false

new μ—°μ‚°μžλ₯Ό μ΄μš©ν•œ 문법은 TypeError λ₯Ό λ°œμƒν•œλ‹€.

var sym = new Symbol();     // TypeError

λ°˜λ“œμ‹œ 심볼 래퍼 객체 생성이 ν•„μš”ν•˜λ©΄ Object() ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.

var sym = Symbol('foo');
typeof sym;               // "symbol"
var symObj = Object(sym);
typeof symObj;            // "object"

μ‹¬λ³Όμ˜ 생성

μ‹¬λ³Όμ˜ 생성은 λ‹€μŒ 3가지 방법이 μžˆλ‹€.

  • κ³ μœ ν•œ 심볼 생성
var sym = Symbol('foo');
  • 심볼 λ ˆμ§€μŠ€νŠΈλ¦¬μ—μ„œ μ°Ύμ•„μ„œ 볡사
var sym = Symbol.for('foo');
  • 미리 μ •μ˜λœ μƒμš© 심볼 μ‚¬μš©
Symbol.iterator

μƒμš©μ‹¬λ³Όμ€ νŠΉλ³„ν•œ μš©λ„λ₯Ό μœ„ν•΄μ„œ λ§Œλ“€μ–΄ 놓은 심볼이며 λŒ€ν‘œμ μΈ μƒμš© 심볼은 λ‹€μŒκ³Ό κ°™λ‹€.

  • Symbol.iterator
    • μ΄ν„°λŸ¬λΈ”ν•œ 객체λ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•œ 심볼
  • Symbol.hasInstance
    • instanceof λ₯Ό ν™•μž₯ν•˜κΈ° μœ„ν•œ 심볼
  • Symbol.match
    • String.prototype.match λ©”μ†Œλ“œμ˜ ν™•μž₯