JavaScriptì íì ê³¼ ìë£êµ¬ì¡°
모ë íë¡ê·¸ëë° ì¸ì´ìë ë´ì¥ë ìë£êµ¬ì¡°ê° ì¡´ì¬íì§ë§, ë³´íµ ê·¸ ë´ì©ì ì¸ì´ë§ë¤ ë¤ë¦ ëë¤. ì´ ê¸ììë JavaScriptìì ì¬ì©í ì ìë ë´ì¥ ìë£êµ¬ì¡°ì ê·¸ ìì±ì ëí´ ììë³´ê² ìµëë¤. ê·¸ë¬ë©´ ì´ ìë£êµ¬ì¡°ë¤ì ë¤ë¥¸ ìë£êµ¬ì¡° ê°ë°ì ì¬ì©í ì ìì ê²ì ëë¤.
ì¸ì´ ê°ìë ì¼ë°ì ì¸ ë°ì´í° íì ì ëí ì ì¬í ì 리ë ë´ì©ì ì ê³µíì§ë§, ë¤ë¥¸ ì¸ì´ì ë ë§ì ë¹êµë¥¼ ì ê³µí©ëë¤.
ëì ë° ì½íì
JavaScriptë ëì íì ì´ ìë ëì ì¸ì´ì ëë¤. JavaScriptì ë³ìë ì´ë¤ í¹ì íì ê³¼ ì°ê²°ëì§ ìì¼ë©°, 모ë íì ì ê°ì¼ë¡ í ë¹ (ë° ì¬í ë¹) ê°ë¥í©ëë¤.
let foo = 42; // fooë ì´ì ì«ìì
ëë¤
foo = "bar"; // fooë ì´ì 문ìì´ì
ëë¤
foo = true; // fooë ì´ì ë¶ë¦¬ì¸ì
ëë¤
JavaScriptë ëí ì½íì ì¸ì´ì´ê¸°ë í©ëë¤. ì¦, ìì ì íì ì¤ë¥ê° ë°ìíë ëì , ì¼ì¹íì§ ìë íì ì´ í¬í¨ë ê²½ì° ììì íì ë³íì´ ê°ë¥í©ëë¤.
const foo = 42; // fooë ì«ìì
ëë¤.
const result = foo + "1"; // JavaScriptë foo를 문ìì´ë¡ ê°ì ë³ííë¯ë¡, ë¤ë¥¸ í¼ì°ì°ìì ì°ê²°í ì ììµëë¤.
console.log(result); // 421
ììì íë³íì ë§¤ì° í¸ë¦¬íì§ë§, ê°ë°ìê° ë³íì ìíí ìëê° ìê±°ë, ë¤ë¥¸ ë°©í¥ì¼ë¡ ë³ííë ¤ë ê²½ì°(ì: ì«ììì 문ìì´ ëì , 문ìì´ìì ì«ìë¡ ë³ííë ê²) ì ì¬ì ì¸ ì¤ë¥(footgun)ê° ë ì ììµëë¤. ê¸°í¸ ë° BigIntsì ê²½ì°, JavaScriptë ìëì ì¼ë¡ í¹ì ììì íì ë³íì íì©íì§ ììµëë¤.
ìì ê°(Primitive values)
Object를 ì ì¸í 모ë íì ì ì¸ì´ì ìµíì ìì¤ìì ì§ì ííëë ë¶ë³ ê°ì ì ìí©ëë¤. ì´ë¬í íì ì ê°ì 'ìì ê°'ì´ë¼ê³ í©ëë¤.
nullì ì ì¸í 모ë 기본 íì
ì typeof ì°ì°ìë¡ í
ì¤í¸í ì ììµëë¤. typeof nullì "object"를 ë°ííë¯ë¡ === nullì ì¬ì©íì¬ nullì í
ì¤í¸í´ì¼ í©ëë¤.
null ë° undefined를 ì ì¸í, 모ë ìì íì
ìë ìì ê°ì¼ë¡ ìì
íë ë° ì ì©í ë©ìë를 ì ê³µíë í´ë¹ ê°ì²´ ëí¼ íì
ì´ ììµëë¤. ì를 ë¤ì´, Number ê°ì²´ë toExponential()ì ê°ì ë©ìë를 ì ê³µí©ëë¤. ìì ê°ìì ìì±ì ì ê·¼íë©´, JavaScriptë ê°ì í´ë¹ ëí¼ ê°ì²´ë¡ ìëì¼ë¡ ê°ì¸ë ëì ê°ì²´ì ìì±ì ì ê·¼í©ëë¤. ê·¸ë¬ë null ëë undefinedìì ìì±ì ì ê·¼íë©´, TypeError ìì¸ê° ë°ìíë¯ë¡ ì íì ì²´ì´ë ì°ì°ì를 ëì
í´ì¼ í©ëë¤.
| Type | typeof return value |
Object wrapper |
|---|---|---|
| Null íì | "object" |
N/A |
| Undefined íì | "undefined" |
N/A |
| Boolean íì | "boolean" |
Boolean |
| Number íì | "number" |
Number |
| BigInt íì | "bigint" |
BigInt |
| String íì | "string" |
String |
| Symbol íì | "symbol" |
Symbol |
ê°ì²´ ëí¼ í´ëì¤ì 참조 íì´ì§ìë ê° íì ì ì¬ì©í ì ìë ë©ìë ë° ìì±ì ëí ìì¸í ì ë³´ì, ìì íì ìì²´ì ì미 ì²´ê³ì ëí ìì¸í ì¤ëª ì´ í¬í¨ëì´ ììµëë¤.
Null íì
Null íì
ì nullì´ë¼ë ì¤ì§ íëì ê°ë§ ê°ì§ ì ììµëë¤.
Undefined íì
Undefined íì
ì undefinedì´ë¼ë ì¤ì§ íëì ê°ë§ ê°ì§ ì ììµëë¤.
ê°ë
ì ì¼ë¡, undefinedë ê°ì´ ììì ì미íê³ , nullì ê°ì²´ê° ììì ì미í©ëë¤.
(typeof null === "object"ì ëí ë³ëª
ì´ ë ìë ììµëë¤). ì¼ë°ì ì¼ë¡ ê°ì´ ìë ê²½ì° ì¸ì´ì 기본ê°ì undefinedì
ëë¤.
- ë°í ê°ì´ ìë
return문(return;)ì ììì ì¼ë¡undefined를 ë°íí©ëë¤. - ì¡´ì¬íì§ ìë ê°ì²´ ìì±ì ì ê·¼ (
obj.iDontExist) íë©´undefinedê° ë°íë©ëë¤. - ì´ê¸°í(
let x;)ê° ìë ë³ì ì ì¸ì ë³ì를undefinedë¡ ììì ì¼ë¡ ì´ê¸°íí©ëë¤. Array.prototype.find()ë°Map.prototype.get()ì ê°ì ëë¶ë¶ì ë©ìëë, ìì를 ì°¾ì ì ìì ëundefined를 ë°íí©ëë¤.
nullì ì¸ì´ì íµì¬ì ì¸ ë¶ë¶ìì ë ì주 ì¬ì©ë©ëë¤. ê°ì¥ ì¤ìí ìì¹ë prototype chainì ëë¶ë¶ì
ëë¤. ì´ì´ì, Object.getPrototypeOf(), Object.create() ë± íë¡í íì
ê³¼ ìí¸ ìì©íë ë©ìëë undefined ëì nullì ë°ê±°ë ë°íí©ëë¤.
nullì í¤ìëì´ì§ë§, undefinedë ì ì ìì±ì¸ ì¼ë°ì ì¸ ìë³ìì
ëë¤. ì¤ì ë¡ë undefinedê° ì¬ì ìëê±°ë ê°ë ¤ì ¸ìë ì ë기 ë문ì ê·¸ ì°¨ì´ë 미미í©ëë¤.
Boolean íì
Boolean íì
ì ë
¼ë¦¬ ìì를 ëíë´ë©° trueì false ë ê°ì§ì ê°ì ê°ì§ ì ììµëë¤.
ë¶ë¦¬ì¸ ê°ì ì¼ë°ì ì¼ë¡ ì¼í ì°ì°ì , if...else, while ë±ì í¬í¨í, ì¡°ê±´ë¶ ì°ì°ì ì¬ì©ë©ëë¤.
Number íì
Number íì
ì ë°°ì ë°ë 64ë¹í¸ ì´ì§ íì IEEE 754 ê°ì
ëë¤. 2-1074 (Number.MIN_VALUE) ì 21024 (Number.MAX_VALUE) ì¬ì´ì ìì ë¶ë ììì ë¿ë§ ìëë¼, -2-1074 ì -21024 ì¬ì´ì ìì ë¶ë ììì ì«ìë ì ì¥í ì ìì§ë§, -(253 â 1) (Number.MIN_SAFE_INTEGER) ì 253 â 1 (Number.MAX_SAFE_INTEGER) ë²ìì ì ìë§ ìì íê² ì ì¥í ì ììµëë¤. ì´ ë²ì를 ë²ì´ëë©´, JavaScriptë ë ì´ì ì ì를 ìì íê² íìí ì ììµëë¤. ëì ë°°ì ë°ë ë¶ë ììì ê·¼ì¬ê°ì¼ë¡ íìë©ëë¤. Number.isSafeInteger()를 ì¬ì©íì¬ ì«ìê° ìì í ì ì ë²ì ë´ì ìëì§ íì¸í ì ììµëë¤.
±(2-1074 to 21024) ë²ì를 ë²ì´ëë ê°ì ìëì¼ë¡ ë³íë©ëë¤.
Number.MAX_VALUEë³´ë¤ í° ììê°ì+Infinityë¡ ë³íë©ëë¤.Number.MIN_VALUEë³´ë¤ ìì ììê°ì+0ì¼ë¡ ë³íë©ëë¤.Number.MAX_VALUEë³´ë¤ ìì ììê°ì-Infinityë¡ ë³íë©ëë¤.Number.MIN_VALUEë³´ë¤ í° ììê°ì-0ì¼ë¡ ë³íë©ëë¤.
+Infinity ë° -Infinityë ìíììì 무íëì ì ì¬íê² ìëíì§ë§, ì½ê°ì ì°¨ì´ê° ììµëë¤. ìì¸í ë´ì©ì Number.POSITIVE_INFINITY ë° Number.NEGATIVE_INFINITY를 ì°¸ê³ íì¸ì.
Number íì
ìë ì¬ë¬ ííì´ ìë íëì ê°ë§ ììµëë¤. 0ì -0ê³¼ +0 ë ë¤ë¡ ííë©ëë¤(ì¬ê¸°ì 0ì +0ì ë³ì¹ì
ëë¤). ì¤ì ë¡ë, ìë¡ ë¤ë¥¸ íí ê°ì ê±°ì ì°¨ì´ê° ììµëë¤. ì를 ë¤ì´, +0 === -0ì trueì
ëë¤. ê·¸ë¬ë, 0ì¼ë¡ ëëë©´ ë¤ìê³¼ ê°ì´ ì ì ììµëë¤.
console.log(42 / +0); // Infinity
console.log(42 / -0); // -Infinity
NaN ("Not a Number")ë ì°ì ì°ì°ì 결과를 ì«ìë¡ ííí ì ìì ë, ì¼ë°ì ì¼ë¡ ë°ìíë í¹ë³í ì¢
ë¥ì ì«ì ê°ì
ëë¤. ëí, "NaN" ì기 ìì ê³¼ ê°ì§ ìì JavaScriptì ì ì¼í ê°ì´ê¸°ë í©ëë¤.
ì«ìë ê°ë ì ì¼ë¡ "ìíì ì¸ ê°"ì´ê³ íì ììì ì¼ë¡ ë¶ë ììì ì¼ë¡ ì¸ì½ë©ëì§ë§, JavaScriptë ë¹í¸ ì°ì°ì를 ì ê³µí©ëë¤. ë¹í¸ ì°ì°ì를 ì ì©í ë ì«ìë 먼ì 32ë¹í¸ ì ìë¡ ë³íë©ëë¤.
ì°¸ê³ : ë¹í¸ ë§ì¤í¹ì ì¬ì©í´ì íëì ì«ì ìì ë¤ìì ë¶ë¦¬ì¸ ê°ì ëíë¼ ë ë¹í¸ ì°ì°ì를 ì¬ì©í ì ì긴 íì§ë§ ì´ê±´ ë³´íµ ëì ë°©ë²ì¼ë¡ ì¬ê²¨ì§ëë¤. JavaScriptë ì¼ë ¨ì ë¶ë¦¬ì¸ ê°ë¤ì ëíë´ë ë°©ë²ì (ë°°ì´ì´ë ë¶ë¦¬ì¸ ìì± ê°ì í ë¹í ê°ì²´ë¡) ì ê³µí©ëë¤. ë¹í¸ ë§ì¤í¹ì ì½ë를 ì½ê³ , ì´í´íê³ , ì ì§í기 íë¤ê² ë§ëëë¤.
ë¤ë§ ë¡ì»¬ ì ì¥ìì íì ë ê³µê°ì íì©í´ì¼ íë¤ê±°ë, ë¤í¸ìí¬ì ë¹í¸ íëíëê° ìì¤í ê·¹í ìí©ì²ë¼ ì íë íê²½ììë ì´ë° 기ì ì´ íìí ìë ììµëë¤. ë¹í¸ ë§ì¤í¹ì ì©ë ìµì íì ë§ì§ë§ ìë¨ì¼ë¡ë§ ê³ ë ¤í´ì¼ í©ëë¤.
BigInt íì
BigInt íì
ì ìì ì ë°ëë¡ ì ì를 ëíë¼ ì ìë JavaScript ì«ì ìì ê°ì
ëë¤. BigIntë¡ Numberì ìì í ì ì ì í(Number.MAX_SAFE_INTEGER)ì ëì´ìë í° ì ìë ìì íê² ì ì¥íê³ ì°ì°í ì ììµëë¤.
BigIntë ì ì ëì nì ì¶ê°íê±°ë BigInt() í¨ì를 í¸ì¶í´ ìì±í ì ììµëë¤.
ë¤ì ìì ë Number.MAX_SAFE_INTEGER를 ì¦ê°ìí¤ë©´, ììë ê°ì ë°ííë ê²ì ë³´ì¬ì¤ëë¤.
// BigInt
const x = BigInt(Number.MAX_SAFE_INTEGER); // 9007199254740991n
x + 1n === x + 2n; // 9007199254740992në 9007199254740993nê³¼ ê°ì§ ìì falseì
ëë¤.
// Number
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // ë ë¤ 9007199254740992 ì´ê¸° ë문ì trueì
ëë¤.
+, *, -, **, % ì°ì°ì를 BigIntììë ì¬ì©í ì ììµëë¤. ê¸ì§ë ì°ì°ìë >>>ë¿ ì
ëë¤. BigIntë Numberì ì격íê² ê°ì§ë ìì§ë§ ëì¨íê² ì ì¬í©ëë¤.
BigIntë ìì를 ëíë¼ ì ìì§ë§, í° ì ì를 ë ì ííê² ëíë¼ ì ì기 ë문ì, BigInt ê°ì ì«ìë³´ë¤ íì ë ì ííê±°ë ë ì ííì§ ììµëë¤. ì´ë¤ íì
ë ë¤ë¥¸ íì
ì ìë°íì§ ìì¼ë©°, ìë¡ ëì²´í ì ììµëë¤. TypeErrorë BigInt ê°ì´ ì°ì ííìì ì¼ë° ì«ìì í¼í©ëê±°ë ìë¡ ììì ì¼ë¡ ë³íëë ê²½ì° ë°ìí©ëë¤.
String íì
String íì
ì í
ì¤í¸ ë°ì´í°ë¥¼ ëíë´ë©°, UTF-16 ì½ë ë¨ì ì를 ëíë´ë 16ë¹í¸ ë¶í¸ ìë ì ì ê°ì ëì´ë¡ ì¸ì½ë©ë©ëë¤. Stringì ê° ììë String ë´ë¶ì ìì¹ë¥¼ ì°¨ì§í©ëë¤. 첫 ë²ì§¸ ììë ì¸ë±ì¤ 0ì, ë¤ì ììë ì¸ë±ì¤ 1ì ììµëë¤. Stringì 길ì´ë UTF-16 ì½ë ë¨ìì ìì´ë©°, ì¤ì ì ëì½ë 문ì ìì ì¼ì¹íì§ ìì ì ììµëë¤. ìì¸í ë´ì©ì String íì´ì§ë¥¼ 참조íì¸ì.
JavaScript Stringì ë³ê²½í ì ììµëë¤. ì¦, Stringì´ ìì±ëë©´ ìì í ì ììµëë¤. String ë©ìëë íì¬ Stringì ë´ì©ì 기ë°ì¼ë¡ ì Stringì ë§ëëë¤. ì를 ë¤ë©´, ë¤ìê³¼ ê°ìµëë¤.
substring()ì ì¬ì©í´ ìë Stringì íì Stringì ë§ë¤ ì ììµëë¤.- ì°ê²° ì°ì°ì(
+) ëëconcat()를 ì¬ì©íì¬ ë 문ìì´ì ì°ê²°í©ëë¤.
"문ìì´ì íì í"를 ì¡°ì¬íë¼
문ìì´ì ì¬ì©í´ ë³µì¡í ë°ì´í°ë¥¼ íííë ê²ì´ ë§¤ë ¥ì ì¼ë¡ ë³´ì¼ì§ë ëª¨ë¥´ê³ , ë¨ê¸°ì ì¼ë¡ë ë¤ìê³¼ ê°ì ì¥ì ì´ ììµëë¤.
- ì°ê²° ì°ì°ì를 íµí´ ë³µì¡í 문ìì´ì ì½ê² ë§ë¤ ì ììµëë¤.
- 문ìì´ì ëë²ê¹ ì´ ì½ìµëë¤. (ì¶ë ¥ ë´ì©ì´ íì 문ìì´ì ê°ê³¼ ëì¼)
- 문ìì´ì ë§ì API(ì
ë ¥ 칸, ë¡ì»¬ ì¤í ë¦¬ì§ ê°,
responseTextì í¨ê» ì¬ì©íëXMLHttpRequestë±ë±)ì ê³µíµ ë¶ëª¨ì´ë©° 문ìì´ë¡ë§ ìì íê³ ì¶ì ì ììµëë¤.
ê·ì¹ì íµí´, ì´ë¤ ìë£êµ¬ì¡°ë¼ë 문ìì´ë¡ ííí ì ììµëë¤. ê·¸ë¬ë ê·¸ê² ì¢ì ë°©ë²ì ìëëë¤. ì를 ë¤ì´, 구ë¶ì를 ì¬ì©íë©´ (ë¬¼ë¡ JavaScript ë°°ì´ì´ ë ì í©íê² ì§ë§) 문ìì´ë¡ 리ì¤í¸ë¥¼ íë´ë¼ ìë ìì ê²ì ëë¤. ê·¸ë¬ë 구ë¶ì를 리ì¤í¸ì ììë¡ ì¬ì©íë ìê° ë¦¬ì¤í¸ê° ë§ê°ì§ê³ ë§ëë¤. ì´ì 구ë¶ì를 구ë¶í기 ìí´ ì´ì¤ì¼ì´í 문ì를 ì ííê³ , ë±ë±... ì´ ëª¨ë ê²ì´ ê°ìì ê·ì¹ì íìë¡ íê³ ë¶íìí ì ì§ë³´ì ë¶ë´ì´ ë°ìí©ëë¤.
문ìì´ì í ì¤í¸ ë°ì´í°ìë§ ì¬ì©íì¸ì. ë³µì¡í ë°ì´í°ë¥¼ ííí´ì¼ í ë 문ìì´ì 구문 ë¶ìíê³ ì í©í ì¶ìí를 ì¬ì©íì¸ì.
Symbol íì
Symbolì ê³ ì íê³ ë³ê²½ ë¶ê°ë¥í ìì ê°ì´ë©° ê°ì²´ì ìì±(ìë를 ì°¸ê³ íì¸ì) í¤ë¡ ì¬ì©í ì ììµëë¤. ì´ë¤ íë¡ê·¸ëë° ì¸ì´ë¤ìì "ìì"ë¼ê³ ë¶ë¥´ê¸°ë í©ëë¤. 기í¸ì 목ì ì ë¤ë¥¸ ì½ëì í¤ì ì¶©ëíì§ ìëë¡ ë³´ì¥ëë ê³ ì í ìì± í¤ë¥¼ ë§ëë ê²ì
ëë¤.
ê°ì²´
ì»´í¨í° ê³¼íììì ê°ì²´ë ìë³ìë¡ ì°¸ì¡°í ì ìë ë©ëª¨ë¦¬ ìì ê°ì ë§í©ëë¤. JavaScriptìì ê°ì²´ë ì ì¼í ë³ê²½ ê°ë¥í ê°ì ëë¤. Functionsë ì¬ì¤ callable ì´ë¼ë ì¶ê° 기ë¥ì´ ìë ê°ì²´ì´ê¸°ë í©ëë¤.
ìì±
JavaScriptììì ê°ì²´ë ìì±ì 컬ë ì ì¼ë¡ ë³¼ ì ììµëë¤. ê°ì²´ 리í°ë´ 구문ì ì¬ì©í´ ì íì ì¼ë¡ ìì±ì ì´ê¸°íí ìì ìê³ , ê·¸ íì ìì±ì ì¶ê°íê±°ë ì ê±°í ìë ììµëë¤. ê°ì²´ ìì±ì í¤-ê° ìê³¼ ëì¼í©ëë¤. ìì± í¤ë stringsíì ëë symbolsíì ì´ ë ì ììµëë¤. ìì± ê°ì¼ë¡ë ë¤ë¥¸ ê°ì²´ë¥¼ í¬í¨í´ 모ë íì ì ì¬ì©í ì ìì¼ë¯ë¡ ë³µì¡í ìë£êµ¬ì¡°ì 구ì¶ì´ ê°ë¥í©ëë¤.
ê°ì²´ ìì±ìë ë°ì´í° ìì±ê³¼ ì ê·¼ì ìì± ë ì¢
ë¥ê° ììµëë¤. ê°ê°ì ìì±ìë ë¤ì 'í¹ì±'(attribute)ë¤ì´ ì¡´ì¬í©ëë¤. í¹ì±ì JavaScript ìì§ ë´ë¶ììë ì ê·¼ëì§ë§, Object.defineProperty()를 íµí´ ì¤ì íê±°ë, Object.getOwnPropertyDescriptor() 를 íµí´ ì½ì ì ììµëë¤.
Object.defineProperty()ìì ë ììë³´ì¸ì.
ë°ì´í° ìì±
ë°ì´í° ìì±ì í¤ë¥¼ ê°ê³¼ ì°ê²°íë©°, ë¤ìê³¼ ê°ì í¹ì±ì ê°ì§ëë¤.
value-
ìì±ì get ì ê·¼ì¼ë¡ ê²ìë ê°ì ëë¤. 모ë JavaScriptì ê°ì´ ë³¼ ì ììµëë¤.
writable-
í ë¹ì¼ë¡ ìì±ì ë³ê²½í ì ìëì§ ì¬ë¶ë¥¼ ëíë´ë ë¶ë¦¬ì¸ ê°ì ëë¤.
enumerable-
A boolean value indicating if the property can be enumerated by a
for...inloop. See also Enumerability and ownership of properties for how enumerability interacts with other functions and syntaxes. -
ìì±ì
for...in루íë¡ ì´ê±°í ì ìëì§ ì¬ë¶ë¥¼ ëíë´ë ë¶ë¦¬ì¸ ê°ì ëë¤. ì´ê±° ê°ë¥ì±ì´ ë¤ë¥¸ í¨ì ë° êµ¬ë¬¸ê³¼ ìí¸ ìì©íë ë°©ìì ëí´ìë ìì± ì´ê±° ê°ë¥ì± ë° ìì ê¶ì 참조íì¸ì. configurable-
ìì±ì ìì í ì ìëì§, ì ê·¼ì ìì±ì¼ë¡ ë³ê²½í ì ìëì§, ìì±ì ë³ê²½í ì ìëì§ë¥¼ ëíë´ë ë¶ë¦¬ì¸ ê°ì ëë¤.
ì ê·¼ì ìì±
ì ê·¼ì ìì±ì í¤ë¥¼ ë ê°ì ì ê·¼ì í¨ì(get, set) ì¤ íëì ì°ê²°íì¬ ê°ì ê°ì ¸ì¤ê±°ë ì ì¥í©ëë¤.
ì°¸ê³ : ì ê·¼ì 'ë©ìë'ê° ìëë¼ ì ê·¼ì 'ìì±'ìì ì¸ì§íë ê²ì´ ì¤ìí©ëë¤. í¨ì를 ê°ì¼ë¡ ì¬ì©íì¬ JavaScript ê°ì²´ì í´ëì¤ì²ë¼ ì ê·¼ì를 ë¶ì¬í ì ìì§ë§, ê·¸ë ë¤ê³ ê·¸ ê°ì²´ê° í´ëì¤ë¡ ë°ëë ê²ì ìëëë¤.
ì ê·¼ì ìì±ì ë¤ìê³¼ ê°ì í¹ì±ì ê°ì§ëë¤.
get-
ê°ì ëí get ì ê·¼ì´ ìíë ëë§ë¤ ìì± ê°ì ê²ìí기 ìí´ ë¹ì´ ìë ì¸ì 목ë¡ì¼ë¡ í¸ì¶ëë í¨ìì ëë¤. getters를 ì°¸ê³ íì¸ì.
undefinedì¼ ì ììµëë¤. set-
í ë¹ë ê°ì í¬í¨íë ì¸ìë¡ í¸ì¶ëë í¨ìì ëë¤. ì§ì ë ìì±ì ë³ê²½íë ¤ê³ ìëí ëë§ë¤ ì¤íë©ëë¤. settersë ì°¸ê³ íì¸ì.
undefinedì¼ ì ììµëë¤. enumerable-
ìì±ì
for...in루íë¡ ì´ê±°í ì ìëì§ ì¬ë¶ë¥¼ ëíë´ë ë¶ë¦¬ì¸ ê°ì ëë¤. ì´ê±° ê°ë¥ì±ì´ ë¤ë¥¸ í¨ì ë° êµ¬ë¬¸ê³¼ ìí¸ ìì©íë ë°©ìì ëí´ìë ìì± ì´ê±° ê°ë¥ì± ë° ìì ê¶ì 참조íì¸ì. configurable-
ìì±ì ìì í ì ìëì§, ë°ì´í° ìì±ì¼ë¡ ë³ê²½í ì ìëì§, ìì±ì ë³ê²½í ì ìëì§ë¥¼ ëíë´ë ë¶ë¦¬ì¸ ê°ì ëë¤.
ê°ì²´ì prototypeì ë¤ë¥¸ ê°ì²´ ëë nullì ê°ë¦¬íµëë¤. ì´ë ê°ë
ì ì¼ë¡ ê°ì²´ì ì¨ê²¨ì§ ìì±ì´ë©°, ì¼ë°ì ì¼ë¡ [[Prototype]]ì¼ë¡ íìë©ëë¤. ê°ì²´ì [[Prototype]]ìì±ì ê°ì²´ ìì²´ììë ì ê·¼í ì ììµëë¤.
ê°ì²´ë ìì í¤-ê° ìì´ë¯ë¡, ì¢
ì¢
ë§µì¼ë¡ ì¬ì©ë©ëë¤. ê·¸ë¬ë ì¸ì²´ ê³µí, ë³´ì ë° ì±ë¥ 문ì ê° ìì ì ììµëë¤. ëì ììì ë°ì´í°ë¥¼ ì ì¥íë ¤ë©´, Mapì ì¬ì©íì¸ì. Map 참조ìë í¤-ê° ì°ê²°ì ì ì¥í기 ìí ì¼ë° ê°ì²´ì Map ê°ì ì¥ë¨ì ì ëí ìì¸í ì¤ëª
ì´ í¬í¨ëì´ ììµëë¤.
ë ì§
ë ì§ì ìê°ì ëíë¼ ëì ê°ì¥ ì¢ì ì íì JavaScript ë´ì¥ Date ì í¸ë¦¬í°ë¥¼ ì¬ì©íë ê²ì
ëë¤.
ì¸ë±ì¤ 컬ë ì : ë°°ì´ê³¼ íìí ë°°ì´
ë°°ì´ì ì ì í¤ë¥¼ ê°ì§ ìì±ê³¼ length ìì± ì¬ì´ì í¹ë³í ì°ê´ì ì§ì´ëì ì¼ë° ê°ì²´ì
ëë¤.
ì´ì ëí´, ë°°ì´ì ë°°ì´ì ì¡°ìí ì ìë ëª ê°ì§ í¸ë¦¬í ë©ìë를 ì ê³µíë Array.prototypeìì ììë©ëë¤. ì를 ë¤ì´, indexOf()ë ë°°ì´ìì ê°ì íìíê³ , push()ë ë°°ì´ì ìì를 ì¶ê°í©ëë¤. ë°ë¼ì ë°°ì´ì ì ë ¬ë 목ë¡ì ëíë´ë ìë²½í íë³´ê° ë©ëë¤.
íìí ë°°ì´(Typed Arrays)ì ì쪽ì ì´ì§ ë°ì´í° ë²í¼ì ëí´ ë°°ì´ê³¼ ê°ì 뷰를 ì ê³µíê³ , ë°°ì´ê³¼ ì미 ì²´ê³ê° ì ì¬í ë§ì ë©ìë를 ì ê³µí©ëë¤. "(íìí ë°°ì´)Typed Array"ì Int8Array, Float32Array ë±ì ë¹ë¡¯í ë¤ìí ë°ì´í° 구조를 ê°ë¦¬í¤ë í¬ê´ì ì¸ ì©ì´ì
ëë¤. ìì¸í ë´ì©ì typed arrayì ì°¸ê³ íì¸ì. Typed Arrayë ì¢
ì¢
ArrayBuffer ë° DataViewì í¨ê» ì¬ì©ë©ëë¤.
í¤ ì»¬ë ì : Maps, Sets, WeakMaps, WeakSets
í¤ ì»¬ë ì
ìë£êµ¬ì¡°ë ê°ì²´ 참조를 í¤ë¡ ê°ì§ëë¤. Setê³¼ WeakSetì ê³ ì í ê°ì 모ìì ëíë´ê³ , Mapê³¼ WeakMapì ê°ì²´ì ê°ì ì°ê²° ì§ë ìë¤ì 모ìì ëíë
ëë¤.
Mapê³¼ Setì ì§ì 구íí ì ììµëë¤. ê·¸ë¬ë ê°ì²´ë¥¼ ì§ì ë¹êµ(<, 'ìì' ë¹êµì ê°ì´)í ë°©ë²ì ìê³ , ìì§ë ê°ì²´ì ëí í´ì í¨ì를 ë
¸ì¶íì§ ì기 ë문ì, ì¡°í ì±ë¥ì´ íì°ì ì¼ë¡ ì íì
ëë¤. (WeakMapì í¬í¨í´) ë¤ì´í°ë¸ 구íì ìì ìê°ì ëí ë¡ê·¸í¨ìì ì¡°í ì±ë¥ì ê°ì§ ì ììµëë¤.
ë³´íµ DOM ë
¸ëì ë°ì´í°ë¥¼ ì°ê²°í ë í´ë¹ ê°ì²´ì ì§ì ìì±ì ì¶ê°íê±°ë data-* í¹ì±ì ì¬ì©íê² ì§ë§, ëì¼í 컨í
ì¤í¸ìì ì´ë ê² ì¶ê°í ë°ì´í°ë¥¼ 모ë ì¤í¬ë¦½í¸ìì ë¤ ì¬ì©í ì ìë¤ë 문ì ê° ììµëë¤. Mapê³¼ WeakMapì ì¬ì©íë©´ ë¹ê³µê° ë°ì´í°ë¥¼ ê°ì²´ì ì½ê² ë°ì¸ë© í ì ììµëë¤.
WeakMap ë° WeakSetì ê°ë¹ì§ 컬ë ì
ì´ ê°ë¥í ê°ì²´ ëë ë±ë¡ëì§ ìì 기í¸ë§ í¤ë¡ íì©íë©°, í¤ê° 컬ë ì
ì ë¨ììì´ë ê°ë¹ì§ 컬ë ì
í ì ììµëë¤. í¹í ë©ëª¨ë¦¬ ì¬ì©ë ìµì íì ì¬ì©ë©ëë¤.
구조íë ìë£: JSON
JSON(JavaScript Object Notation)ì ê²½ë ë°ì´í° êµí íìì¼ë¡, JavaScriptìì íìëì§ë§ ë§ì íë¡ê·¸ëë° ì¸ì´ìì ì¬ì©íê³ ììµëë¤. JSONì ë¤ìí í경과 ì¸ì´ ê°ì ì ì¡í ì ìë ë²ì© ë°ì´í° 구조를 구ì±í©ëë¤. ìì¸í ë´ì©ì JSON를 참조íì¸ì.
íì¤ ë¼ì´ë¸ë¬ë¦¬ì ë ë§ì ê°ì²´
JavaScriptë ë´ì¥ ê°ì²´ë¡ 구ì±ë íì¤ ë¼ì´ë¸ë¬ë¦¬ë¥¼ í¬í¨í©ëë¤. ë´ì¥ ê°ì²´ì ëí´ ìì¸í ììë³´ë ¤ë©´ ì°¸ê³ ì를 ì½ì´ë³´ì¸ì.
íì ê°ì ë³í
ììì ì¸ê¸íë¯ì´, JavaScriptë ì½íì ì¸ì´ì ëë¤. ì¦, ë¤ë¥¸ íì ì´ ììëë íëì íì ì ê°ì ì주 ì¬ì©í ì ìì¼ë©°, ì¸ì´ìì ì´ë¥¼ ì í©í íì ì¼ë¡ ë³íí´ì¤ëë¤. ì´ë¥¼ ìí´, JavaScriptë ëª ê°ì§ ê°ì ë³í ê·ì¹ì ì ìí©ëë¤.
ìì íì ê°ì ë³í
ìì íì ê°ì ë³í íë¡ì¸ì¤ë ìì ê°ì´ ììëë ê²½ì°ì ì¬ì©ëì§ë§, ì¤ì íì ì´ ë¬´ìì´ì´ì¼ íëì§ì ëí ê°ë ¥í ì í¸ëë ììµëë¤. ì¼ë°ì ì¼ë¡ string, number ëë BigIntì´ ëë±íê² íì©ëë ê²½ì°ì ëë¤. ì를 ë¤ë©´ ìëì ê°ìµëë¤.
Date()ìì±ìëDateì¸ì¤í´ì¤ê° ìë íëì ì¸ì를 ë°ë ê²½ì°, Stringì ë ì§ Stringì ëíë´ë ë°ë©´, ì«ìë íìì¤í¬í를 ëíë ëë¤.+ì°ì°ì, íëì í¼ì°ì°ìê° Stringì´ë©´ String ì°ê²°ì´ ìíë©ëë¤.==ì°ì°ì, í¼ì°ì°ì ì¤ íëê° ìì íì ì´ê³ ë¤ë¥¸ í¼ì°ì°ìë ê°ì²´ì¸ ê²½ì°, ê°ì²´ë ì í¸ íì ì´ ìë ìì ê°ì¼ë¡ ë³íë©ëë¤.
ì´ ìì
ì ê°ì´ ì´ë¯¸ ìì íì
ì¸ ê²½ì°, ë³íì ìííì§ ììµëë¤. ê°ì²´ë [@@toPrimitive]() (íí¸ë¡ "default" ì¬ì©), valueOf(), toString() ë©ìë를 ì°¨ë¡ë¡ í¸ì¶íì¬ ìì íì
ì¼ë¡ ë³íë©ëë¤. ìì íì
ë³íì toString() ì´ì ì valueOf()를 í¸ì¶íëë°, ì´ë ì«ì ê°ì ë³íì ëìê³¼ ë¹ì·íì§ë§, string ê°ì ë³íê³¼ë ë¤ë¦
ëë¤.
[@@toPrimitive]() ë©ìëê° ìë ê²½ì°, ìì íì
ì ë°íí´ì¼ í©ëë¤. ê°ì²´ë¥¼ ë°ííë©´ TypeErrorê° ë°ìí©ëë¤. valueOf() ë° toString()ì ê²½ì°, íëê° ê°ì²´ë¥¼ ë°ííë©´ ë°í ê°ì 무ìëê³ ë¤ë¥¸ íëì ë°í ê°ì´ ëì ì¬ì©ë©ëë¤. ë ë¤ ì¡´ì¬íì§ ìê±°ë, ìì íì
ì ë°ííì§ ìì¼ë©´ TypeErrorê° ë°ìí©ëë¤. ë¤ì ì½ë를 ìë¡ ë¤ ì ììµëë¤.
console.log({} + []); // "[object Object]"
{} ëë []ìë [@@toPrimitive]() ë©ìëê° ììµëë¤. {} ë° [] 모ë ê°ì²´ ì체를 ë°ííë Object.prototype.valueOfìì valueOf()를 ììí©ëë¤. ë°í ê°ì ê°ì²´ì´ë¯ë¡ 무ìë©ëë¤. ë°ë¼ì toString()ì´ ëì í¸ì¶ë©ëë¤. {}.toString()ì "[object Object]"를 ë°ííë ë°ë©´, [].toString()ë ""를 ë°ííë¯ë¡, ê²°ê³¼ë ì°ê²°ë ê°ì¸ "[object Object]"ì
ëë¤.
[@@toPrimitive]() ë©ìëë ìì íì
ì¼ë¡ ë³íí ë íì ì°ì í©ëë¤. ìì íì
ë³íì ì¼ë°ì ì¼ë¡ valueOf()ê° ì°ì ì ì¼ë¡ í¸ì¶ë기 ë문ì, ì«ì ê°ì ë³íê³¼ ê°ì´ ëìí©ëë¤. ê·¸ë¬ë ì¬ì©ì ì§ì [@@toPrimitive]() ë©ìëê° ìë ê°ì²´ë 모ë ìì íì
ì ë°ííëë¡ ì íí ì ììµëë¤. Date ë° Symbol ê°ì²´ë [@@toPrimitive]() ë©ìë를 ì¬ì ìíë ì ì¼í ë´ì¥ ê°ì²´ì
ëë¤. Date.prototype[@@toPrimitive]()ë "default" íí¸ë¥¼ "string"ì¸ ê²ì²ë¼ ì·¨ê¸íë ë°ë©´, Symbol.prototype[@@toPrimitive]()ë íí¸ë¥¼ 무ìíê³ íì 기í¸(symbol)ì ë°íí©ëë¤.
ì«ì ê°ì ë³í
Number ë° BigIntì ë ê°ì§ ì«ì íì
ì´ ììµëë¤. ëëë¡ ì¸ì´ë í¹ë³í ì«ì ëë BigInt(ì: ì¸ë±ì¤ê° ì«ìì¬ì¼ íë Array.prototype.slice())를 기ëí©ëë¤. ë¤ë¥¸ ê²½ì°ìë, ë ì¤ íë를 íì©íê³ í¼ì°ì°ìì íì
ì ë°ë¼ ë¤ë¥¸ ìì
ì ìíí ì ììµëë¤. ë¤ë¥¸ íì
ì ììì ë³íì íì©íì§ ìë ì격í ê°ì ë³í íë¡ì¸ì¤ë ì«ì ê°ì ë³í ë° BigInt ê°ì ë³íì 참조íì¸ì.
ì«ì ê°ì ë³íì BigIntê° TypeError를 ë°ììí¤ë ëì ìë ê·¸ëë¡ ë°íëë¤ë ì ì ì ì¸íë©´ ì ê°ì ë³í(number coercion)íê³ ê±°ì ëì¼í©ëë¤. ì«ì ê°ì ë³íì Numberì BigInt 모ëì ëí´ ì¤ë²ë¡ë©ë기 ë문ì, 모ë ì°ì ì°ì°ììì ì¬ì©ë©ëë¤. ì ì¼í ìì¸ë íì ì«ì ê°ì ë³íì ìííë ë¨í ëí기ì
ëë¤.
기í ê°ì ë³í
Null, Undefined ë° Symbolì ì ì¸í 모ë ë°ì´í° íì ìë ê°ê°ì ê°ì ë³í íë¡ì¸ì¤ê° ììµëë¤. ìì¸í ë´ì©ì string ê°ì ë³í, ë¶ë¦¬ì¸(boolean) ê°ì ë³í ë° ê°ì²´ ê°ì ë³íìì íì¸íì¸ì.
ëì¹ì±ì ¨ê² ì§ë§, ê°ì²´ë¥¼ ìì íì ì¼ë¡ ë³íí ì ìë ì¸ ê°ì§ ê²½ë¡ê° ììµëë¤.
- ìì íì
ê°ì ë³í:
[@@toPrimitive]("default")âvalueOf()âtoString() - ì«ì ê°ì ë³í, number coercion, BigInt coercion:
[@@toPrimitive]("number")âvalueOf()âtoString() - 문ìì´ ê°ì ë³í:
[@@toPrimitive]("string")âtoString()âvalueOf()
모ë ê²½ì°ì, [@@toPrimitive]()ì´ ìì¼ë©´ í¸ì¶ ê°ë¥íê³ , ìì íì
ì ë°íí´ì¼ íë©°, valueOf ëë toStringì í¸ì¶ ê°ë¥íì§ ìê±°ë ê°ì²´ë¥¼ ë°ííë ê²½ì° ë¬´ìë©ëë¤. íë¡ì¸ì¤ê° ëëê³ , ì±ê³µíë©´ ê²°ê³¼ê° ìì íì
ìì ë³´ì¥í©ëë¤. ê²°ê³¼ ìì íì
ì 컨í
ì¤í¸ì ë°ë¼ ì¶ê° ê°ì ì ì©ì ë°ìµëë¤.
ê°ì´ 보기
- Oleksii Trekhlebì JavaScript ë°ì´í° 구조 ë° ìê³ ë¦¬ì¦
- Nicholas Zakasì JavaScript ê³µíµ ë°ì´í° 구조 ë° ìê³ ë¦¬ì¦ ëª¨ì