Skip to content

Latest commit

Β 

History

History
101 lines (61 loc) Β· 2.82 KB

File metadata and controls

101 lines (61 loc) Β· 2.82 KB

μ†Œκ°œ (Introduction)

ECMAScript 2015λΆ€ν„°, symbol은 number와 string 같은 κΈ°λ³Έ μžλ£Œν˜•μž…λ‹ˆλ‹€.

symbol 값듀은 Symbolμƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ„œ μƒμ„±ν•©λ‹ˆλ‹€.

let sym1 = Symbol();

let sym2 = Symbol("key"); // 선택적 λ¬Έμžμ—΄ ν‚€

μ‹¬λ²Œμ€ λΆˆλ³€ν•˜λ©° μœ μΌν•©λ‹ˆλ‹€.

let sym2 = Symbol("key");
let sym3 = Symbol("key");

sym2 === sym3; // false, μ‹¬λ²Œμ€ μœ μΌν•©λ‹ˆλ‹€.

λ¬Έμžμ—΄μ²˜λŸΌ, μ‹¬λ²Œμ€ 객체 ν”„λ‘œνΌν‹°μ˜ ν‚€λ‘œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

const sym = Symbol();

let obj = {
    [sym]: "value"
};

console.log(obj[sym]); // "value"

μ‹¬λ²Œμ€ κ³„μ‚°λœ ν”„λ‘œνΌν‹° μ„ μ–Έκ³Ό κ²°ν•©ν•΄ 객체 ν”„λ‘œνΌν‹°μ™€ 클래슀 멀버λ₯Ό μ„ μ–Έν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

const getClassNameSymbol = Symbol();

class C {
    [getClassNameSymbol](){
       return "C";
    }
}

let c = new C();
let className = c[getClassNameSymbol](); // "C"

잘 μ•Œλ €μ§„ μ‹¬λ²Œλ“€ (Well-known Symbols)

μ‚¬μš©μž-μ •μ˜ μ‹¬λ²Œ 이외에도, 잘 μ•Œλ €μ§„ λ‚΄μž₯ μ‹¬λ²Œλ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€. λ‚΄μž₯된 μ‹¬λ²Œλ“€μ€ λ‚΄λΆ€ μ–Έμ–΄ λ™μž‘μ„ λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

λ‹€μŒμ€ 잘 μ•Œλ €μ§„ μ‹¬λ²Œ λͺ©λ‘μž…λ‹ˆλ‹€:

Symbol.hasInstance

μƒμ„±μž 객체가 μ–΄λ–€ 객체λ₯Ό μƒμ„±μžμ˜ μΈμŠ€ν„΄μŠ€λ‘œ μΈμ‹ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€. instanceof μ—°μ‚°μžλ‘œ ν˜ΈμΆœλ©λ‹ˆλ‹€.

Symbol.isConcatSpreadable

객체가 μžμ‹ μ˜ λ°°μ—΄ μš”μ†Œλ₯Ό Array.prototype.concatλ₯Ό μ‚¬μš©ν•˜μ—¬ 직렬둜 λ‚˜νƒ€λ‚Ό 수 μžˆλŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λΆˆλ¦¬μ–Έ κ°’μž…λ‹ˆλ‹€.

Symbol.iterator

객체의 κΈ°λ³Έ 반볡자λ₯Ό λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€. for-of 문으둜 ν˜ΈμΆœν•©λ‹ˆλ‹€.

Symbol.match

μ •κ·œμ‹μ„ λ¬Έμžμ—΄κ³Ό λΉ„κ΅ν•˜λŠ” μ •κ·œμ‹ λ©”μ„œλ“œμž…λ‹ˆλ‹€. String.prototype.match λ©”μ„œλ“œλ‘œ ν˜ΈμΆœν•©λ‹ˆλ‹€.

Symbol.replace

μΌμΉ˜ν•˜λŠ” λΆ€λΆ„ λ¬Έμžμ—΄μ„ λŒ€μ²΄ν•˜λŠ” μ •κ·œμ‹ λ©”μ„œλ“œμž…λ‹ˆλ‹€. String.prototype.replace λ©”μ„œλ“œλ‘œ ν˜ΈμΆœν•©λ‹ˆλ‹€.

Symbol.search

μ •κ·œμ‹κ³Ό μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄μ˜ 인덱슀λ₯Ό λ°˜ν™˜ν•˜λŠ” μ •κ·œμ‹ λ©”μ„œλ“œμž…λ‹ˆλ‹€. String.prototype.search λ©”μ„œλ“œλ‘œ ν˜ΈμΆœν•©λ‹ˆλ‹€.

Symbol.species

νŒŒμƒλœ 객체λ₯Ό λ§Œλ“œλŠ” μƒμ„±μž ν•¨μˆ˜ ν”„λ‘œνΌν‹° κ°’μž…λ‹ˆλ‹€.

Symbol.split

μ •κ·œμ‹κ³Ό μΌμΉ˜ν•˜λŠ” μΈλ±μŠ€λ“€μ— μœ„μΉ˜ν•œ λ¬Έμžμ—΄μ„ λΆ„ν• ν•˜λŠ” μ •κ·œμ‹ λ©”μ„œλ“œμž…λ‹ˆλ‹€. String.prototype.split λ©”μ„œλ“œλ‘œ ν˜ΈμΆœν•©λ‹ˆλ‹€.

Symbol.toPrimitive

객체λ₯Ό ν•΄λ‹Ή κΈ°λ³Έ κ°’μœΌλ‘œ λ³€ν™˜ν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€. ToPrimitive 좔상 μ—°μ‚°μœΌλ‘œ ν˜ΈμΆœν•©λ‹ˆλ‹€.

Symbol.toStringTag

객체의 κΈ°λ³Έ λ¬Έμžμ—΄ μ„€λͺ…을 λ§Œλ“œλŠ” 데 μ‚¬μš©λ˜λŠ” λ¬Έμžμ—΄ κ°’μž…λ‹ˆλ‹€. λ‚΄μž₯ λ©”μ†Œλ“œObject.prototype.toString둜 ν˜ΈμΆœν•©λ‹ˆλ‹€.

Symbol.unscopables

κ³ μœ ν•œ ν”„λ‘œνΌν‹° 이름듀이 μ—°κ΄€λœ 객체의 'with' ν™˜κ²½ λ°”μΈλ”©μ—μ„œ μ œμ™Έλœ κ°μ²΄μž…λ‹ˆλ‹€.