- νμ€ λΉνΈμΈ κ°μ²΄μΈ
String
μ μμνμ λ¬Έμμ΄μ λ€λ£° λ μ μ©ννλ‘νΌν°
μλ©μλ
λ₯Ό μ 곡νλ€.
- νμ€ λΉνΈμΈ κ°μ²΄μΈ String κ°μ²΄λ
μμ±μ ν¨μ
μ΄λ€.- λ°λΌμ
new μ°μ°μ
μ ν¨κ» νΈμΆ ν΄μΌ νλ€.
- λ°λΌμ
- String μμ±μ ν¨μμ μΈμλ₯Ό μ λ¬νμ§ μκ³ , new μ°μ°μμ νΈμΆ μ
[[StringData]]
λ΄λΆ μ¬λ‘―μλΉλ¬Έμμ΄
μ ν λΉνString λνΌ κ°μ²΄
λ₯Ό μμ±νλ€. - λ°λλ‘, String μμ±μ ν¨μμ μΈμλ‘ λ¬Έμμ΄μ μ λ¬νλ©΄μ new μ°μ°μμ ν¨κ» νΈμΆ μ μΈμλ‘ μ λ¬ λ°μ λ¬Έμμ΄μ
[[StringData]]
λ΄λΆ μ¬λ‘―μλνΌ κ°μ²΄λ‘ μμ±
- new μ°μ°μλ₯Ό μ¬μ©νμ§ μκ³ String μμ±μλ₯Ό νΈμΆνλ©΄ String μΈμ€ν΄μ€κ° μλ λ¬Έμμ΄μ λ°ννλ€( λͺ μμ νμ λ³νμλ μ¬μ© λ¨ )
π‘ String λνΌ κ°μ²΄λ λ°°μ΄κ³Ό λ§μ°¬κ°μ§λ‘ length νλ‘νΌν°λ₯Ό κ°μ§λ©°, μ μ¬ λ°°μ΄μ΄λ©΄μ μ΄ν°λ¬λΈμ΄λ€.
//λ¬Έμμ΄μ μμκ°μ΄κΈ° λλ¬Έμ λ³κ²½ν μ μλ€. μλ¬ λ°μXX
λνΌκ°μ²΄[0] = "S"
μμ μ½λ λ¬Έμμ΄ μ λ¬ X
const strObj = new string();
console.log(strObj); //String {length:0, [[StringData]]:""}
μμ μ½λ λ¬Έμμ΄ μ λ¬ O
const strObj = new String("KIM");
console.log(Object.getOwnPropertyDescriptors(strObj));
// {
// '0': { value: 'K', writable: false, enumerable: true, configurable: false },
// '1': { value: 'I', writable: false, enumerable: true, configurable: false },
// '2': { value: 'M', writable: false, enumerable: true, configurable:
// }
- String κ°μ²΄μλ μλ³Έ String λνΌ κ°μ²΄λ₯Ό
μ§μ λ³κ²½νλ λ©μλλ μλ€.
- λ¬Έμμ΄μ λ³κ²½ λΆκ°λ₯ν
μμκ°
μ΄κΈ° λλ¬ΈμString λνΌ κ°μ²΄
λμ½κΈ° μ μ©
κ°μ²΄λ‘ μ 곡λ¨
- λ¬Έμμ΄μ λ³κ²½ λΆκ°λ₯ν
- String κ°μ²΄μ λͺ¨λ λ©μλλ String
λνΌ κ°μ²΄λ₯Ό μ§μ λ³κ²½ λΆκ°λ₯
- String κ°μ²΄μ λ©μλλ
μΈμ λ μλ‘μ΄ λ¬Έμμ΄μ μμ±
ν΄μ λ°ν νλ€.
μμ μ½λ
const strObj = new String("kim");
console.log(Object.getOwnPropertyDescriptors(strObj));
// {
// '0': { value: 'k', writable: false, enumerable: true, configurable: false },
// '1': { value: 'i', writable: false, enumerable: true, configurable: false },
// '2': { value: 'm', writable: false, enumerable: true, configurable: false },
// }
- μΈμλ‘ μ λ¬λ°μ
λ¬Έμμ΄μ κ²μ
ν΄μ 첫λ²μ§Έ λ¬Έμμ΄μ λ°ννλ€. - λμ λ¬Έμμ΄μ νΉμ λ¬Έμμ΄μ΄ μ‘΄μ¬νλμ§ νμΈν λ μ μ©νλ€.
const str = "Hello World";
console.log(str.indexOf("l")); // 2
// 2κ° μ΄μ λ¬Έμμ΄ κ²μ κ°λ₯
console.log(str.indexOf("or")); // 7
// μ‘΄μ¬νμ§ μλ λ¬Έμμ΄ κ²μ
console.log(str.indexOf("z")); // -1
// 6λ²μ§Έ μΈλ±μ€λΆν° κ²μ
console.log(str.indexOf("l", 6)); // 9
// ES6 includes λ©μλ => κ°λ
μ± μ¦κ°
console.log(str.includes("l")); // true
- μΈμλ‘ μ λ¬λ°μ
μ κ·ννμ
과맀μΉ
νλ λ¬Έμμ΄μ κ²μνμ¬ μΌμΉνλ λ¬Έμμ΄μΈλ±μ€λ₯Ό λ°ν
- κ²μ μ€ν¨ μ
-1
- κ²μ μ€ν¨ μ
μμ μ½λ
const str = "Hello World";
console.log(str.search(/o/)); // 4
console.log(str.search(/z/)); // -1
- λ¬Έμμ΄μ μΈμλ‘ μ λ¬λ°μ
λ¬Έμμ΄μ΄ ν¬ν¨
λμ΄μλμ§ νμΈ νbooleanμΌλ‘ λ°ν
- λ©μλμ 2λ²μ§Έ μΈμλ‘
κ²μμ μμν μΈλ±μ€ μ λ¬
κ°λ₯
μμ μ½λ
const str = "Hello World";
console.log(str.includes("World")); // true
console.log(str.includes("")); // true
console.log(str.includes("z")); // false
console.log(str.includes()); // false
- λμ λ¬Έμμ΄μ΄ μΈμλ‘ μ λ¬λ°μ
λ¬Έμμ΄λ‘ μμ
νλμ§ νμΈ νboolean λ°ν
- λ©μλμ 2λ²μ§Έ μΈμλ‘
κ²μμ μμν μΈλ±μ€ μ λ¬
κ°λ₯
μμ μ½λ
const str = "Hello World";
console.log(str.startsWith("Hell")); // true
console.log(str.startsWith("")); // true
console.log(str.startsWith("z")); // false
console.log(str.startsWith()); // false
- λμ λ¬Έμμ΄μ΄ μΈμλ‘ μ λ¬λ°μ
λ¬Έμμ΄λ‘ λλλμ§
νμΈ νboolean λ°ν
- λ©μλμ 2λ²μ§Έ μΈμλ‘
κ²μν λ¬Έμμ΄μ κΈΈμ΄
μ λ¬ κ°λ₯
- λ©μλμ 2λ²μ§Έ μΈμλ‘
μμ μ½λ
const str = "Hello World";
console.log(str.endsWith("rld")); // true
console.log(str.endsWith("")); // true
console.log(str.endsWith("z")); // false
console.log(str.endsWith()); // false
- λμ λ¬Έμμ΄μμ μΈμλ‘
μ λ¬λ°μ μΈλ±μ€μ μμΉν λ¬Έμ
λ₯Ό κ²μν΄μ ``νλ€.- μΈλ±μ€μ λ¬Έμμ΄ λ²μ :
0 ~ (λ¬Έμμ΄ κΈΈμ΄-1)
- μΈλ±μ€κ° λ¬Έμμ΄μ λ²μλ₯Ό λ²μ΄ λ¬μ λ :
λΉ λ¬Έμμ΄ λ°ν
- μΈλ±μ€μ λ¬Έμμ΄ λ²μ :
μμ μ½λ
const str = "Hello World";
console.log(str.charAt(4)); // o
console.log(str.charAt(0)); // H
console.log(str.charAt(-1)); //
console.log(str.charAt(1000)); //
- λμ λ¬Έμμ΄μμ 첫 λ²μ§Έ μΈμλ‘ μ λ¬λ°μ μΈλ±μ€ -> λ λ²μ§Έ μΈμλ‘ μ λ¬λ°μ μΈλ±μ€μ μμΉνλ
λ¬Έμμ λ°λ‘ μ΄μ κΉμ§
μλ¬Έμμ΄ λ°ν
-
λ λ²μ§Έ μΈμλ μλ΅ κ°λ₯
-
μ λ¬νλ μΈμμ λν΄ λ€μκ³Ό κ°μ νΉμ§μ΄ μ‘΄μ¬
- 첫 λ²μ§Έ μΈμ > λ λ²μ§Έ μΈμ :
λ μΈμλ κ΅ν
- μΈμ < 0 or NaN :
0μΌλ‘ μ·¨κΈ
- μΈμ > μ 체 λ¬Έμμ΄ κΈΈμ΄ :
μΈμλ μ 체 λ¬Έμμ΄ κΈΈμ΄λ‘ μ·¨κΈ
- 첫 λ²μ§Έ μΈμ > λ λ²μ§Έ μΈμ :
substring
λ©μλμ λμΌνκ² λμν¨slice
λ μμμΈ μΈμλ₯Ό μ λ¬ κ°λ₯νλ€.μμμΈ μΈμλ₯Ό μ λ¬
νλ©΄ λμ λ¬Έμμ΄μκ°μ₯ λ€μμ λΆν° μμ
νμ¬ λ¬Έμμ΄μμλΌλ΄μ΄ λ°ν
νλ€.
μμ μ½λ
const str = "hello world";
//substring slice λ©μλμ λμΌνκ² μλ
//0λ²μ§Έ λΆν° 5λ²μ§Έ μ΄μ λ¬ΈμκΉμ§ μλΌλ΄μ΄ λ°ν
str.substring(0, 5); // 'hello'
str.slice(0, 5); // 'hello'
//μΈμ < 0 or NaNμΈ κ²½μ° 0μΌλ‘ μ·¨κΈνλ€
str.substring(-5); // 'hello world'
//slice λ©μλλ μμμΈ μΈμλ₯Ό μ λ¬ν μ μλ€. λ€μμ 5μκΈ°λ₯Ό μλΌλ΄μ΄ λ°ννλ€.
str.slice(-5); // 'world'
- λμ λ¬Έμμ΄μ λͺ¨λ λλ¬Έμλ‘ λ³κ²½ν΄μ λ°ν
μμ μ½λ
const str = "Hello World";
console.log(str.toUpperCase()); // HELLO WORLD
- λμ λ¬Έμμ΄μ λͺ¨λ
μλ¬Έμλ‘ λ³κ²½ν΄μ λ°ν
μμ μ½λ
const str = "Hello World";
console.log(str.toLowerCase()); // hello world
- λμ λ¬Έμμ΄
μλ€
μ곡백문μ
κ° μμ κ²¨μ° μ΄λ₯Όμ κ±° ν λ¬Έμμ΄ λ°ν
μμ μ½λ
const str = " Hello World ";
console.log(str.trim()); // Hello World
console.log(str.trimRight()); // Hello World
console.log(str.trimLeft()); // Hello World
console.log(str.trimStart()); // Hello World
console.log(str.trimEnd()); // Hello World
- μΈμλ‘ μ λ¬λ°μ
μ μλ§νΌ λ°λ³΅ν΄
μ°κ²°ν μλ‘μ΄ λ¬Έμμ΄μ λ°ννλ€.μΈμ 0
: λΉλ¬Έμμ΄ λ°νμΈμ < 0
: RangeError λ°μμΈμ μλ΅
: κΈ°λ³Έκ° 0 μ΄ λλ€.
μμ μ½λ
const str = "Hello ";
console.log(str.repeat()); //
console.log(str.repeat(2)); // Hello Hello
console.log(str.repeat(0)); //
console.log(str.repeat(2.5)); // Hello Hello
console.log(str.repeat(-2)); // RangeError: Invalid count value
- 첫λ²μ§Έ μΈμλ‘ μ λ¬ λ°μ
λ¬Έμμ΄
orμ κ·ννμ
μ κ²μνμ¬λ λ²μ§Έ μ λ¬ν λ¬Έμμ΄λ‘ μΉν
- μ¬λ¬ λ¬Έμμ΄μ΄ μ‘΄μ¬ν κ²½μ°
첫λ²μ§Έλ‘ κ²μλ λ¬Έμμ΄λ§ μΉν
λλ€.
- μ¬λ¬ λ¬Έμμ΄μ΄ μ‘΄μ¬ν κ²½μ°
μμ μ½λ
const str = "Hello World";
console.log(str.replace("World", "word")); // Hello word
console.log(str.replace(/^hello/i, "Hell")); // Hell World
- λλ²μ§Έ μΈμλ‘
μΉν ν¨μ
μ λ¬ κ°λ₯νλ€ - 맀μΉλμ΄ μΉνλ κ²°κ³Όλ₯Ό λ λ²μ§Έ μΈμλ‘ μ λ¬ν μΉν ν¨μμ μΈμλ‘ μ λ¬νλ©΄μ νΈμΆνκ³ μΉν ν¨μκ° λ°νν κ²°κ³Όμ λ§€μΉ κ²°κ³Όλ₯Ό μΉν
μμ μ½λ
// String.prototype.replace μΉν ν¨μ μ μ© μ
// μΉ΄λ© μΌμ΄μ€ -> μ€λ€μ΄ν¬ μΌμ΄μ€λ‘
function camelToSnake(camelCase) {
return camelCase.replace(/.[A-Z]/g, (match) => {
console.log(match); // oW
return match[0] + "_" + match[1].toLowerCase();
});
}
const camelCase = "helloWorld";
console.log(camelToSnake(camelCase)); // helloWorld
// μ€λ€μ΄ν¬ μΌμ΄μ€ -> μΉ΄λ© μΌμ΄μ€λ‘
function snakeToCamel(snakeCase) {
return snakeCase.replace(/_[a-z]/g, (match) => {
console.log(match); // _w
return match[1].toUpperCase();
});
}
const snakeCase = "hello_world";
console.log(snakeToCamel(snakeCase)); // hello_world
- 첫 λ²μ§Έ μΈμλ‘ μ λ¬ν
λ¬Έμμ΄
orμ κ· ννμ
μ κ²μν΄μ λ¬Έμμ΄μ ꡬλΆν νλΆλ¦¬λ κ° λ¬Έμμ΄λ‘ μ΄λ£¨μ΄μ§ λ°°μ΄
μλ°ν
νλ€.
μμ μ½λ
const str = "How are you doing?";
console.log(str.split(" ")); // [ 'How', 'are', 'you', 'doing?' ]
console.log(str.split(/\s/)); // [ 'How', 'are', 'you', 'doing?' ]
console.log(str.split("")); // ["H", "o", "w", " ", "a", "r", "e", " ", "y", "o", "u", " ", "d", "o", "i", "n", "g", "?"]
console.log(str.split()); // [ 'How are you doing?' ]
- λ³κ²½ λΆκ°λ₯ν μμ νμ μ κ°
- λ€λ₯Έ κ°κ³Ό μ€λ³΅λμ§ μλ μ μΌ λ¬΄μν κ°
- μ΄λ¦μ μΆ©λ μνμ΄ μλ μ μΌν νλ‘νΌν° ν€λ₯Ό λ§λ€κΈ° μν΄ μ¬μ©
-
μμ±μ ν¨μκ° μλκΈ° λλ¬Έμ new μ¬μ© μ :
TypeError λ°μ
-
Symbol ν¨μλ₯Ό νΈμΆν΄μ μμ±νλ€. (
리ν°λ΄ νκΈ°λ²μΌλ‘ μμ± λΆκ°λ₯
)- μ΄λ μμ±λ Symbol κ°μ μΈλΆλ‘ λ
ΈμΆλμ§ μμ
νμΈ ν μ μκ³
, λ€λ₯Έ κ°κ³Ό μ€λ³΅λμ§ μλμ μΌλ¬΄μ΄ν κ°
μ΄λ€.
- μ΄λ μμ±λ Symbol κ°μ μΈλΆλ‘ λ
ΈμΆλμ§ μμ
μμ μ½λ (Symbol κ° νμ λΆκ°)
// μ¬λ² κ° μμ± - Symbol ν¨μ
const symbol = Symbol();
console.log(typeof symbol); // symbol
// μ¬λ² κ°μ μΈλΆλ‘ λ
ΈμΆλμ§ μμ νμΈ λΆκ°
console.log(symbol); // Symbol()
- Symbol ν¨μμλ μ νμ μΌλ‘
λ¬Έμμ΄ μΈμ μ λ¬ κ°λ₯
μ€λͺ (λλ²κΉ ) μ©λλ‘λ§ νμ©
λλ©°, Symbol ν¨μμ μ λ¬λ μΈμκ° κ°λλΌλ Symbolμ νμ μ μΌλ¬΄μ΄ν κ°μ΄λ€.
μμ μ½λ (Symbol ν¨μμ λ¬Έμ μ λ¬)
const symbol1 = Symbol("symbol1");
const symbol2 = Symbol("symbol1");
console.log(symbol1 === symbol2); // false
console.log(symbol1.description === symbol2.description); // true
console.log(symbol1, symbol2); // Symbol(symbol1) Symbol(symbol1)
- Symbolκ°λ κ°μ²΄ μ²λΌ
(.)
μ κ·Ό μ μ묡μ μΌλ‘λνΌ κ°μ²΄
μμ±νλ€.
μμ μ½λ (Symbol λνΌ κ°μ²΄)
const mySymbol = Symbol("mySymbol");
// μ¬λ² κ°λ κ°μ²΄μ²λΌ μ¬μ© μ λνΌ κ°μ²΄λ₯Ό μμ±
console.log(mySymbol.description); // mySymbol
console.log(mySymbol.toString()); // Symbol(mySymbol)
- Symbolκ°μ μ묡μ μΌλ‘ μ«μ νμ
, λ¬Έμμ΄λ‘ λ³νλμ§ μλλ€.
boolean
μΌλ‘λ μ묡μ νμ λ³νλλ€.
μμ μ½λ (Symbol μ묡μ νμ λ³ν)
const mySymbol = Symbol();
console.log(!!mySymbol); // true
console.log(mySymbol + ""); // TypeError: Cannot convert a Symbol value to a string
π‘ μΈμλ‘ μ λ¬λ°μ λ¬Έμμ΄μ ν€λ‘ μ¬μ©νμ¬ { ν€ : μ¬λ² κ° }μ μλ€μ΄ μ μ₯λμ΄ μλ μ μ μ¬λ² λ μ§μ€νΈλ¦¬μμ ν΄λΉ ν€μ μΌμΉνλ μ¬λ² κ°μ κ²μ
π‘ Symbol.keyFor λ©μλλ₯Ό μ¬μ©ν΄μ μ μ μ¬λ² λ μ§μ€νΈλ¦¬μ μ μ₯λ μ¬λ² κ°μ ν€λ₯Ό μΆμΆν μ μλ€.
-
μΈμλ‘ μ λ¬ λ°μ λ¬Έμμ΄μ ν€λ‘ μ¬μ©νμ¬ ν€μ μ¬λ² κ°μ μλ€μ΄ μ μ₯λμ΄ μλ
μ μ μ¬λ² λ μ§μ€νΈλ¦¬
μμν΄λΉ ν€μ μΌμΉνλ μ¬λ²κ°
κ²μνλ€.- κ²μ μ±κ³΅ :
κ²μλ μ¬λ² κ° λ°ν
νλ€. - κ²μ μ€ν¨ :
μλ‘μ΄ μ¬λ² κ°μ μμ±
ν Symbol.for λ©μλμ μΈμλ‘ μ λ¬λ ν€λ‘μ μ μ¬λ² λ μ§μ€νΈλ¦¬μ μ μ₯
λ ν ,μμ±λ μ¬λ²κ° λ°ν
- κ²μ μ±κ³΅ :
-
Symbol.for
λ©μλλ₯Ό μ¬μ©νλ©΄ μ μμμ μ μΌλ¬΄μ΄ν μ¬λ² κ°μ λ¨ νλλ§ μμ±νμ¬ μ μ μ¬λ² λ μ§μ€νΈλ¦¬λ₯Ό ν΅ν΄ 곡μ κ°λ₯
μμ μ½λ Symbol.for
const symbol1 = Symbol.for("symbol");
const symbol2 = Symbol.for("symbol");
// μλ¨μμ symbol μ΄λ¦μ μ¬λ² κ°μ symbol1 μμ±μ μ΄λ―Έ μ μ μ¬λ² λ μ§μ€νΈλ¦¬μ λ±λ‘νλ€.
// symbol2 μμ Symbol.for νΈμΆν κ²½μ°, μ΄λ―Έ μ μ μ¬λ² λ μ§μ€νΈλ¦¬μλ symbol μ΄λΌλ μ΄λ¦μ ν€λ‘ κ°μ§λ μ¬λ² κ°μ΄ μ‘΄μ¬νλ€.
// λ°λΌμ, symbol1 κ³Ό symbol2 μ ν λΉλ μ¬λ² κ°μ κ°μ μ¬λ² κ°μ΄λ€.
console.log(symbol1 === symbol2); // true
Symbol.keyfor
λ©μλλ₯Ό μ¬μ©νλ©΄ μ μ μ¬λ² λ μ§μ€νΈλ¦¬μ μ μ₯λ μ¬λ² κ°μ ν€λ₯Ό μΆμΆ κ°λ₯ νλ€.μμ μ½λ Symbol.keyfor
// Symbol.for λ©μλλ‘€ μμ±λ μ¬λ² κ°μ μ μ μ¬λ² λ μ§μ€νΈλ¦¬μ μ‘΄μ¬νμ§ μμ κ²½μ° μμ± ν λ±λ‘λμ΄ κ΄λ¦¬λλ€.
const symbol1 = Symbol.for("symbol1");
console.log(Symbol.keyFor(symbol1)); // symbol1
// Symbol ν¨μλ‘ μμ±ν μ¬λ² κ°μ μ μ μ¬λ² λ μ§μ€νΈλ¦¬μ λ±λ‘λμ΄ κ΄λ¦¬λμ§ μλλ€.
const symbol2 = Symbol("symbol2");
console.log(Symbol.keyFor(symbol2)); // undefined
- κ°μλ νΉλ³ν μλ―Έκ° μκ³ μμ μ΄λ¦ μ체μ μλ―Έκ° μλ κ²½μ°
- λ€λ₯Έ λ³μ κ°κ³Ό
μ€λ³΅
λ μ λ μλ€.
- λ€λ₯Έ λ³μ κ°κ³Ό
λ³κ²½/μ€λ³΅
λ κ°λ₯μ± μλ무μλ―Έν μμ
- μ€λ³΅λ κ°λ₯μ±μ΄ μλ μ μΌλ¬΄μ΄ν
μ¬λ² κ°μ μ¬μ©
νλ κ²μ΄ μ’μ
- μ€λ³΅λ κ°λ₯μ±μ΄ μλ μ μΌλ¬΄μ΄ν
μμ μ½λ
// { ν€: κ°(μμ) } ννλ‘ 4λ°©ν₯μ μλ―Ένλ Direction κ°μ²΄
// 1,2,3,4 λΌλ μμλ νΉλ³ν μλ―Έλ μκ³ , μ΄ν λ€λ₯Έ λ³μμ κ°κ³Ό μ€λ³΅λ κ°λ₯μ±μ΄ ν¬λ€.
const Direction = {
UP: 1,
DOWN: 2,
LEFT: 3,
RIGHT: 4,
};
// { ν€ : κ°(μ¬λ² κ°) } ννλ‘ λ³κ²½ν Direction κ°μ²΄
// ν€μ κ°λ€μ΄ μ¬λ² κ°μΌλ‘, μ€λ³΅λ κ°λ₯μ±μ΄ μλ μμ κ°μ΄ λμλ€.
const Direction = {
UP: Symbol("up"),
DOWN: Symbol("down"),
LEFT: Symbol("left"),
RIGHT: Symbol("right"),
};
μ μΌ λ¬΄μν νλ‘νΌν° ν€κ° μμ±κ°λ₯
for...in
,Objects.keys
λ©μλλ‘ μ°Ύμ μ μμ΄μ νλ‘νΌν°λ₯Όμλ
ν μ μλ€.
- κ°μ²΄μ νλ‘νΌν° ν€λ λΉ λ¬Έμμ΄μ ν¬ν¨νλ
λͺ¨λ λ¬Έμμ΄
λλμ¬λ² κ°
μΌλ‘ λ§λ€ μ μλ€.- μ¬λ² κ°μ νλ‘νΌν° ν€λ‘ μ¬μ©νλ €λ©΄ νλ‘νΌν° ν€λ‘ μ¬μ©ν μ¬λ² κ°μ
λκ΄νΈ
λ₯Ό μ¬μ© ν΄μΌ νλ€.
- μ¬λ² κ°μ νλ‘νΌν° ν€λ‘ μ¬μ©νλ €λ©΄ νλ‘νΌν° ν€λ‘ μ¬μ©ν μ¬λ² κ°μ
μμ μ½λ
// μ¬λ²μ μ μΌλ¬΄μ΄ν κ°μΌλ‘ μ¬λ² κ°μΌλ‘ νλ‘νΌν° ν€λ₯Ό λ§λ€λ©΄ λ€λ₯Έ νλ‘νΌν° ν€μ μ λ μΆ©λνμ§ μλλ€.
const obj = {
[Symbol.for("mySymbol")]: 1,
};
obj[Symbol.for("mySymbol")];
π‘ μΌλ°μ μΌλ‘ νμ€ λΉνΈμΈ κ°μ²΄μ μ¬μ©μ μ μ λ©μλλ₯Ό μ§μ μΆκ°νλ κ²μ κΆμ₯νμ§ μλλ€. (λ―Έλμ νμ€ μ¬μ λ©μλμ μ€λ³΅λ μ μκΈ° λλ¬Έ)
π‘ νμ§λ§, μ€λ³΅λ κ°λ₯μ±μ΄ μλ μ¬λ² κ°μΌλ‘ νλ‘νΌν° ν€ κ°μ μμ±νμ¬ κ°μ²΄λ₯Ό νμ₯νλ©΄ μ΄λ€ νλ‘νΌν° ν€μλ μΆ©λνμ§ μκΈ° λλ¬Έμ μμ νκ² νμ₯μ΄ κ°λ₯νλ€.
// Array νμ€ λΉνΈμΈ κ°μ²΄μ λ©μλλ₯Ό μΆκ°νμ¬ νμ₯νλ κ² => κΆμ₯ X
Array.prototype.sum = function () {
return this.reduce((acc, cur) => acc + cur, 0);
}[(1, 2, 3)].sum(); // 6
// μ¬λ² κ°μΌλ‘ νλ‘νΌν° ν€λ₯Ό κ°λ λ©μλλ‘ νμ₯νλ κ²½μ° => νΈνμ± μΈ‘λ©΄μμ O
Array.prototype[Symbol.for("sum")] = function () {
return this.reduce((acc, cur) => acc + cur, 0);
}[
// λ¨, νΈμΆ μμ μ΄μν μν©μ΄ μ°μΆ
(1, 2, 3)
][Symbol.for("sum")](); // 6
π‘ μλ°μ€ν¬λ¦½νΈκ° κΈ°λ³Έ μ 곡νλ λΉνΈμΈ μ¬λ² κ°μ ECMAScript μ¬μμμλ Well-known Symbol μ΄λΌ λΆλ₯Έλ€. (μλ°μ€ν¬λ¦½νΈ λ΄λΆ μκ³ λ¦¬μ¦μ μ¬μ©λ¨)
for - of
λ¬ΈμΌλ‘ μν κ°λ₯ν μ΄ν°λ¬λΈμWell-known Symbol
μΈSymbol.iterator
λ₯Ό ν€λ‘ κ°λ λ©μλλ₯Ό κ°μ§λ€.Symbol.iterator λ©μλλ₯Ό νΈμΆ β μ΄ν°λ μ΄ν°λ₯Ό λ°ν ( μ΄ν°λ μ΄μ νλ‘ν μ½ )
- λ§μ½, μΌλ° κ°μ²΄λ₯Ό μ΄ν°λ¬λΈμ²λΌ λμνλλ‘ κ΅¬ννκ³ μΆλ€λ©΄ μ΄ν°λ μ΄μ
νλ‘ν μ½μ λ°λ₯΄λ©΄ λλ€.
- μ¦, Symbol.iterator λ₯Ό ν€λ‘ κ°λ λ©μλλ₯Ό κ°μ²΄μ μΆκ°νκ³ μ΄ν°λ μ΄ν°λ₯Ό λ°ννλλ‘ κ΅¬ννλ©΄, κ·Έ κ°μ²΄λ₯Ό μ΄ν°λ¬λΈμ΄ λλ€.
μμ μ½λ
const iterable = {
// Symbol.itertor λ©μλλ₯Ό ꡬννμ¬ μ΄ν°λ¬λΈ νλ‘ν μ½μ μ€μ
[Symbol.iterator]() {
let cur = 1;
const max = 5;
// Symbol.iterator λ©μλλ next λ©μλλ₯Ό μμ ν μ΄ν°λ μ΄ν°λ₯Ό λ°νν΄μΌ νλ€.
return {
next() {
return { value: cur++, done: cur > max + 1 };
},
};
},
};
for (const num of iterable) {
console.log(num); // 1 2 3 4 5
}