JavaScriptë íì ë° ì°ì°ì, íì¤ ë´ì¥ ê°ì²´ ë° ë©ìë를 í¬í¨íë ë¤ì¤ í¨ë¬ë¤ì ëì ì¸ì´ì ëë¤. 문ë²ì Java ë° C ì¸ì´ë¥¼ 기ë°ì¼ë¡ í©ëë¤. í´ë¹ ì¸ì´ë¤ì ë§ì êµ¬ì¡°ê° JavaScriptìë ì ì©ë©ëë¤. JavaScriptë ê°ì²´ íë¡í íì ë° í´ëì¤ë¥¼ ì¬ì©íì¬ ê°ì²´ ì§í¥ íë¡ê·¸ëë°ì ì§ìí©ëë¤. ëí í¨ìë ííìì íµí´ ì½ê² ìì±ëê³ ë¤ë¥¸ ê°ì²´ì²ë¼ ì ë¬ë ì ìë first-classì´ë¯ë¡ í¨ìí íë¡ê·¸ëë°ì ì§ìí©ëë¤.
ì´ íì´ì§ë C ëë Javaì ê°ì ë¤ë¥¸ ì¸ì´ì ëí ë°°ê²½ ì§ìì´ ìë ë ì를 ìí´ ìì±ë, ë¤ìí JavaScript ì¸ì´ 기ë¥ì ëí ê°ëµí ê°ì를 ì ê³µí©ëë¤.
ë°ì´í° íì모ë ì¸ì´ì êµ¬ì± ììì¸ íì ì ì´í´ë³´ë ê²ì¼ë¡ ììíê² ìµëë¤. JavaScript íë¡ê·¸ë¨ì ê°ì ì¡°ìíë©°, ì´ë¬í ê°ì 모ë íì ì ìí©ëë¤. JavaScriptë 7ê°ì§ 기본 ì íì ì ê³µí©ëë¤.
true
ë° false
, ì¼ë°ì ì¼ë¡ ì¡°ê±´ ë
¼ë¦¬ì ì¬ì©ë©ëë¤.ë¤ë¥¸ 모ë ê²ì ê°ì²´ë¼ê³ í©ëë¤. ì¼ë°ì ì¸ ê°ì²´ íì ì ë¤ìê³¼ ê°ìµëë¤.
í¨ìë JavaScriptì í¹ë³í ë°ì´í° êµ¬ì¡°ê° ìëëë¤. í¸ì¶í ì ìë í¹ë³í íì ì ê°ì²´ì¼ ë¿ì ëë¤.
ì (Numbers)JavaScriptìë Numberì BigIntë¼ë ë ê°ì§ ë´ì¥ ì«ì íì ì´ ììµëë¤.
ì«ì íì ì ì´ì¤ì ë°ë 64ë¹í¸ ë¶ëììì íì(IEEE 754)ì ê°ì´ë©°, ì¦, -(253 â 1)ì 253 â 1ì¬ì´ìì ì ì를 ìì¤ ìì´ ìì íê² ííí ì ììµëë¤. ì ë°ë ë° ë¶ë ììì ì«ìë ìµë 1.79 à 10308ê¹ì§ ì ì¥í ì ììµëë¤. ì«ì ë´ìì JavaScriptë ë¶ë ììì ì«ìì ì ì를 구ë¶íì§ ììµëë¤.
console.log(3 / 2); // 1.5, not 1
"ëª ë°±í ì ì"ë ì¬ì¤ "ì묵ì ì¼ë¡ float(ì¤ì)"ì ëë¤. IEEE 754 ì¸ì½ë©ì¼ë¡ ì¸í´ ëëë¡ ë¶ë ììì ì°ì ì°ì°ì´ ì ííì§ ìì ì ììµëë¤.
console.log(0.1 + 0.2); // 0.30000000000000004
ë¹í¸ ì°ì°ê³¼ ê°ì´, ì ìê° íìí ì°ì°ì ê²½ì°, ì«ìê° 32ë¹í¸ ì ìë¡ ë³íë©ëë¤.
Number 리í°ë´(literals)ìë 기본(2ì§ì, 8ì§ì, 10ì§ì ëë 16ì§ì) ëë ì§ì ì 미ì¬ë¥¼ ëíë´ë ì ëì¬ë¥¼ ê°ì§ ìë ììµëë¤.
console.log(0b111110111); // 503
console.log(0o767); // 503
console.log(0x1f7); // 503
console.log(5.03e2); // 503
BigInt íì
ì ìì 길ì´ì ì ìì
ëë¤. ê·¸ ëìì Cì ì ì íì
(ì: ëëê¸°ê° 0ì¼ë¡ ì르기)ê³¼ ì ì¬íì§ë§, 무íì 커ì§ì ìë¤ë ì ê³¼ ë¤ë¦
ëë¤. BigIntë ì«ì 리í°ë´ê³¼ n
ì 미ì¬ë¡ ì§ì ë©ëë¤.
console.log(-3n / 2n); // -1n
ëí기, 빼기, ëë¨¸ì§ ì°ì ë±ì í¬í¨í íì¤ ì°ì ì°ì°ìê° ì§ìë©ëë¤. BigIntì ì«ìë ì°ì ì°ì°ìì í¼í©ë ì ììµëë¤.
Math
ê°ì²´ë íì¤ ìí í¨ìì ìì를 ì ê³µí©ëë¤.
Math.sin(3.5);
const circumference = 2 * Math.PI * r;
문ìì´ì ì«ìë¡ ë³ííë ì¸ ê°ì§ ë°©ë²ì´ ììµëë¤.
parseInt()
, 문ìì´ìì ì ì를 구문 ë¶ìí©ëë¤.parseFloat()
, ë¶ëììì ì«ìì ëí 문ìì´ì 구문 ë¶ìí©ëë¤.Number()
í¨ìë 문ìì´ì ì«ì 리í°ë´ì¸ ê²ì²ë¼ 구문 ë¶ìíê³ ë¤ìí ì«ì ííì ì§ìí©ëë¤.ë¨í ëí기 +
를 Number()
ì ì¤ìë§ë¡ ì¬ì©í ìë ììµëë¤.
ì«ì ê°ìë NaN
("Not a Number"ì ì¤ìë§) ë° Infinity
ë í¬í¨ë©ëë¤. ë§ì "ì못ë ìí" ì°ì°ì NaN
ì ë°íí©ëë¤. ì를 ë¤ì´, ì«ìê° ìë 문ìì´ì 구문 ë¶ìíë ¤ê³ íê±°ë Math.log()
를 ìì ê°ì¼ë¡ ì§ì í©ëë¤. 0ì¼ë¡ ëëë©´ 'Infinity'(ìì ëë ìì)ê° ìì±ë©ëë¤.
NaN
ì ì ì¼ì±ì´ ììµëë¤. ìí ì°ì°ì í¼ì°ì°ìë¡ ì ê³µíë©´ ê²°ê³¼ë NaN
ì´ ë©ëë¤. NaN
ì ìì²´ì ê°ì§ ìì JavaScriptì ì ì¼í ê°ì
ëë¤(IEEE 754 ëª
ì¸ì ë°ë¦).
JavaScriptì 문ìì´ì ì ëì½ë 문ìì ìíì¤ì ëë¤. ì´ë êµì í를 ë¤ë£¨ì´ì¼ íë 모ë ì¬ëìê² ë°ê°ì´ ììì´ ë ê²ì ëë¤. ë ì ííê²ë UTF-16 encoded를 ì¬ì©í©ëë¤.
console.log("Hello, world");
console.log("ä½ å¥½ï¼ä¸çï¼"); // ê±°ì 모ë ì ëì½ë 문ì를 문ì ê·¸ëë¡ ë¬¸ìì´ ë¦¬í°ë´ë¡ ìì±í ì ììµëë¤.
문ìì´ì ììë°ì´íë í°ë°ì´íë¡ ìì±í ì ììµëë¤. JavaScriptë 문ìì 문ìì´ì 구ë¶íì§ ììµëë¤. ë¨ì¼ 문ì를 ëíë´ë ¤ë©´, í´ë¹ ë¨ì¼ 문ìë¡ êµ¬ì±ë 문ìì´ì ì¬ì©íë©´ ë©ëë¤.
console.log("Hello"[1] === "e"); // true
문ìì´ì 길ì´(ì½ë ë¨ì)를 ì°¾ì¼ë ¤ë©´, length
ìì±ì ì ê·¼íì¸ì.
문ìì´ìë 문ìì´ì ì¡°ìíê³ ë¬¸ìì´ì ëí ì ë³´ì ì ê·¼íë ì í¸ë¦¬í° ë©ìëê° ììµëë¤. 모ë ìì íì ì ì¤ê³ ì ë³ê²½í ì ì기 ë문ì, ì´ë¬í ë©ìëë ì 문ìì´ì ë°íí©ëë¤.
+
ì°ì°ìë 문ìì´ì ëí´ ì¤ë²ë¡ëë©ëë¤. í¼ì°ì°ì ì¤ íëê° ë¬¸ìì´ì´ë©´, ì«ì ì¶ê° ëì 문ìì´ ì°ê²°ì ìíí©ëë¤. í¹ë³í í
í릿 문ìì´ êµ¬ë¬¸ì ì¬ì©íë©´ ííìì´ í¬í¨ë 문ìì´ì ë ê°ê²°íê² ìì±í ì ììµëë¤. Pythonì f-문ìì´ì´ë C#ì ë³´ê°ë 문ìì´ê³¼ ë¬ë¦¬, í
í릿 리í°ë´ì ë°±í±(ììë°ì´íë í°ë°ì´íê° ìë)ì ì¬ì©í©ëë¤.
const age = 25;
console.log("I am " + age + " years old."); // 문ìì´ ì°ê²°
console.log(`I am ${age} years old.`); // í
í릿 리í°ë´
ì´ì¸ì íì
ë¤
JavaScriptë ìëì ì¼ë¡ ê°ì´ ììì ëíë´ë (ê·¸ë¦¬ê³ null
í¤ìë를 íµí´ìë§ ì ê·¼í ì ìë) ê°ì¸ null
ê³¼ ê°ì´ ììì ëíë´ë undefined
를 구ë¶í©ëë¤. undefined
ì ì»ì ì ìë ë°©ë²ìë ì¬ë¬ ê°ì§ê° ììµëë¤.
return
문 (return;
)ì ììì ì¼ë¡ undefined
를 ë°íí©ëë¤.obj.iDontExist
)ì ì ê·¼íë©´ undefined
를 ë°íí©ëë¤.let x;
)ì ììì ì¼ë¡ ë³ì를 undefined
ë¡ ì´ê¸°íí©ëë¤.JavaScriptìë true
ë° false
ê°ì´ ê°ë¥í ë¶ë¦¬ì¸(Boolean) íì
ì´ ììµëë¤. ë ë¤ í¤ìëì
ëë¤. ë¤ì ê·ì¹ì ë°ë¼ 모ë ê°ì ë¶ë¦¬ì¸ ê°ì¼ë¡ ë³íí ì ììµëë¤.
false
, 0
, ë¹ ë¬¸ìì´ (""
),NaN
, null
, ì undefined
ì 모ë false
ê° ë©ëë¤.true
ê° ë©ëë¤.ì´ ë³íì Boolean()
í¨ì를 ì¨ì ëª
ìì ì¼ë¡ ì´ ìì
ì ìííì¤ ì ììµëë¤.
Boolean(""); // false
Boolean(234); // true
íì§ë§ ì´ë ê² í íìë ê±°ì ììµëë¤. JavaScriptë ì´ë¬í ë³í ìì
ì if
문(ì ì´ êµ¬ì¡° ì°¸ê³ )ê³¼ ê°ì´ ë¶ë¦¬ì¸ ê°ì´ íìí ê²½ì°ë¥¼ ë§ëê² ëë©´ ìëì¼ë¡ ë³íí기 ë문ì
ëë¤. ì´ë¬í ì´ì ë¡ ì¸í´ ì°ë¦¬ë ëëë¡ ë¶ë¦¬ì¸ 컨í
ì¤í¸ìì ì¬ì©ë ë ê°ê° true
, false
ê° ëë "ì°¸ ê°ì ê°(truthy)"ì "ê±°ì§ ê°ì ê°(falsy)" ì ëí´ ì´ì¼ê¸°í ê²ì
ëë¤.
ë¶ë¦¬ì¸ ì°ì°ìë ë
¼ë¦¬ ì°ì°ì &&
(ë
¼ë¦¬í©), ||
(ë
¼ë¦¬ê³±), ê·¸ë¦¬ê³ !
(ë¶ì )ì´ ì§ìë©ëë¤. ì°ì°ì를 참조íì¸ì.
기í¸(Symbol) íì
ì ì¢
ì¢
ê³ ì í ìë³ì를 ë§ëë ë° ì¬ì©ë©ëë¤. Symbol()
í¨ìë¡ ë§ë 모ë 기í¸(Symbol)ë ê³ ì í¨ì ë³´ì¥í©ëë¤. ëí, ê³µì ììì¸ ë±ë¡ë 기í¸ì í¹ì ìì
ì ëí "íë¡í ì½"ë¡ ì¸ì´ìì ì¬ì©ëë ì ìë ¤ì§ ê¸°í¸ê° ììµëë¤. ê¸°í¸ ì°¸ì¡°ìì ìì¸í ë´ì©ì ì½ì ì ììµëë¤.
JavaScriptì ë³ìë let
, const
ë° var
ì ì¸ ê°ì§ í¤ìë ì¤ íë를 ì¬ì©íì¬ ì ì¸ë©ëë¤.
let
ì ì¬ì©íë©´ ë¸ë¡ ë 벨 ë³ì를 ì ì¸í ì ììµëë¤. ì ì¸ë ë³ìë "ë³ìê° ì ì¸ë ë¸ë¡"ìì ì¬ì©í ì ììµëë¤.
let a;
let name = "Simon";
// myLetVariableë ì¬ê¸°ìì ë³´ì´ì§ *ììµëë¤*
for (let myLetVariable = 0; myLetVariable < 5; myLetVariable++) {
// myLetVariableë ì¬ê¸°ììë§ ì¬ì©í ì ììµëë¤
}
// myLetVariableë ì¬ê¸°ìì ë³´ì´ì§ *ììµëë¤*
const
ë ê°ì´ ë³ê²½ëì§ ìì ë³ì를 ì ì¸í ì ìê² í©ëë¤. ë³ìë "ë³ìê° ì ì¸ë ë¸ë¡"ìì ì¬ì©í ì ììµëë¤.
const Pi = 3.14; // ë³ì Pi ì¤ì
console.log(Pi); // 3.14
const
ë¡ ì ì¸ë ë³ìë ì¬í ë¹í ì ììµëë¤.
const Pi = 3.14;
Pi = 1; // ìì ë³ì를 ë³ê²½í ì ì기 ë문ì ì¤ë¥ê° ë°ìí©ëë¤.
const
ì ì¸ì ì¬í ë¹ë§ ë°©ì§í©ëë¤. ê°ì²´ì¸ ê²½ì° ë³ì ê°ì ë³íì ë°©ì§íì§ ììµëë¤.
const obj = {};
obj.a = 1; // ìë¬ ìì
console.log(obj); // { a: 1 }
var
ì ì¸ì ê²½ì
í ë§í ëì(ì: ë¸ë¡ ë²ìê° ìë)ì ê°ì§ ì ìì¼ë©°, ìµì JavaScript ì½ëììë ê¶ì¥ëì§ ììµëë¤.
ê°ì í ë¹íì§ ìê³ ë³ì를 ì ì¸íë©´, ê·¸ ê°ì undefined
ì
ëë¤. ì´ì°¨í¼ ëì¤ì ë³ê²½í ì ì기 ë문ì, ì´ê¸°íí´ì£¼ë ê²ìì´ const
ë³ì를 ì ì¸í ì ììµëë¤.
let
ë° const
ì ì¸ ë³ìë ì¬ì í ì ìë ì ì²´ ë²ì를 ì°¨ì§íë©°, ì¤ì ì ì¸ ì¤ ì´ì ì ì¼ìì ì¬ê°ì§ë(temporal dead zone)ì¼ë¡ ìë ¤ì§ ììì ììµëë¤. ì¬ê¸°ìë ë¤ë¥¸ ì¸ì´ììë ë°ìíì§ ìë ë³ì ìëìê³¼ í¥ë¯¸ë¡ì´ ìí¸ ìì©ì´ ììµëë¤.
function foo(x, condition) {
if (condition) {
console.log(x);
const x = 2;
console.log(x);
}
}
foo(1, true);
ëë¶ë¶ì ë¤ë¥¸ ì¸ì´ìì, const x = 2
í ì´ì ì x
ê° ì¬ì í ìì ë²ìì 매ê°ë³ì x
를 참조í´ì¼ í기 ë문ì "1"ê³¼ "2"를 기ë¡í©ëë¤. JavaScriptììë ê° ì ì¸ì´ ì ì²´ ë²ì를 ì°¨ì§í기 ë문ì 첫 ë²ì§¸ console.log
ì "ì´ê¸°í ì ì 'x'ì ì ê·¼í ì ììµëë¤." ë¼ë ì¤ë¥ê° ë°ìí©ëë¤. ìì¸í ë´ì©ì let
íì´ì§ë¥¼ 참조íì¸ì.
JavaScriptë ëì íì
ì¸ì´ì
ëë¤. íì
(ì´ì ì¹ì
ìì ì¤ëª
í ëë¡)ì ë³ìê° ìë ê°ê³¼ë§ ì°ê²°ë©ëë¤. let
ì ì¸ ë³ìì ê²½ì° íì ì¬í ë¹ì íµí´ íì
ì ë³ê²½í ì ììµëë¤.
JavaScriptì ì°ì ì°ì°ìë¡ë +
, -
, *
, /
, %
(ëë¨¸ì§ ì°ì°ì), **
(ì§ì ì°ì°ì)ê° ììµëë¤. ê°ì =
ì°ì°ìë¡ í ë¹í ì ìê³ , +=
ì -=
ì ê°ì ë³µí© í ë¹ ì°ì°ì를 íµí´ìë í ë¹í ì ììµëë¤. ì´ë ê² ì°ì¸ ì°ì°ìë x = x ì°ì°ì y
ì ê°ì 결과를 ëíë
ëë¤.
++
ì --
를 ê°ê° ì¦ê°ì ê°ìì ì¬ì©í ì ììµëë¤. ì´ë¤ì ëí ì ì²ë¦¬ ëë íì²ë¦¬ ì°ì°ìë¡ ì¬ì©ë ì ììµëë¤.
+
ì°ì°ìë 문ìì´ì ì°ê²°í©ëë¤.
"hello" + " world"; // "hello world"
ì«ì(ëë ë¤ë¥¸ ê°)ì 문ìì´ì ì¶ê°íë©´ 모ë ê²ì´ 먼ì 문ìì´ë¡ ë³íë©ëë¤. ì´ê²ì ë¹ì ì ëì´ë¨ë¦´ ì ììµëë¤.
"3" + 4 + 5; // "345"
3 + 4 + "5"; // "75"
무ì¸ê°ì ë¹ ë¬¸ìì´ì ì¶ê°íë ê²ì í´ë¹ ê°ì 문ìì´ë¡ ë°ê¾¸ë ìë ¹ì ëë¤.
JavaScriptì ë¹êµë <
, >
, <=
ë° >=
를 ì¬ì©í´ ë§ë¤ ì ìê³ , ì´ ì°ì°ìë¤ì 문ìì´ê³¼ ì ì쪽 모ëìì ëìí©ëë¤. ëë±ì±ì ìí´ ì´ì¤ ë±í¸ ì°ì°ìë ë¤ë¥¸ íì
ì ì ê³µíë ê²½ì° íì
ê°ì ë³íì ìííë©°, ëë¡ë í¥ë¯¸ë¡ì´ 결과를 ë³´ì¬ì¤ëë¤. ë°ë©´ì, ì¼ì¤ ë±í¸ ì°ì°ìë íì
ê°ì ë³íì ìëíì§ ìì¼ë©° ì¼ë°ì ì¼ë¡ ì í¸íë ë°©ë²ì
ëë¤.
123 == "123"; // true
1 == true; // true
123 === "123"; // false
1 === true; // false
ì´ì¤ ë±í¸ì ì¼ì¤ ë±í¸ìë !=
ì !==
ê°ì ë¶ë±í¸ë ììµëë¤.
JavaScriptìë ë¹í¸ ì°ì°ì ë° ë ¼ë¦¬ ì°ì°ìë ììµëë¤. í¹í ë ¼ë¦¬ ì°ì°ìë ë¶ë¦¬ì¸ ê°ì¼ë¡ë§ ìëíì§ ìê³ ê°ì "ì§ì¤ì±"ì ë°ë¼ ìëí©ëë¤.
const a = 0 && "Hello"; // 0ì "falsy" ì´ë¼ì, 0ì
ëë¤.
const b = "Hello" || "world"; // "Hello"ì "world" 모ë "truthy"ì´ë¼ì, "Hello" ì
ëë¤.
&&
ë° ||
ì°ì°ìë ë¨ë½ ë
¼ë¦¬ë¥¼ ì¬ì©í©ëë¤. ì¦, ë ë²ì§¸ í¼ì°ì°ì를 ì¤íí ì§ ì¬ë¶ë 첫 ë²ì§¸ í¼ì°ì°ìì ë°ë¼ ê²°ì ë©ëë¤. ì´ë ìì±ì ì ê·¼í기 ì ì null ê°ì²´ë¥¼ íì¸íë ë° ì ì©í©ëë¤.
const name = o && o.getName();
ëë ìºì± ê°ì ê²½ì°(ê±°ì§ ê°ì´ ì í¨íì§ ìì ê²½ì°)
const name = cachedName || (cachedName = getName());
ì ì²´ ì°ì°ì 목ë¡ì ê°ì´ë íì´ì§ ëë 참조 ì¹ì ì 참조íì¸ì. í¹í ì°ì°ì ì°ì ììì ê´ì¬ì´ ìì ìë ììµëë¤.
문ë²JavaScript 문ë²ì C ê³ì´ê³¼ ë§¤ì° ì ì¬í©ëë¤. ì¸ê¸í ê°ì¹ê° ìë ëª ê°ì§ ì¬íì´ ììµëë¤.
//
ëë /* */
ì ì¬ì©í©ëë¤. #
ì ì¬ì©íë Perl, Python, and Bashì ê°ì ë¤ë¥¸ ë§ì ì¤í¬ë¦½í
ì¸ì´ìë ë¤ë¦
ëë¤.JavaScript 문ë²ì ëí ìì¸í ë´ì©ì ì´í ë¬¸ë² ì°¸ì¡° íì´ì§ë¥¼ 참조íì¸ì.
ì ì´ êµ¬ì¡°JavaScriptë C ê³ì´ì ë¤ë¥¸ ì¸ì´ë¤ê³¼ ë¹ì·í ì ì´ êµ¬ì¡°ë¥¼ ê°ì§ê³ ììµëë¤. 조건문ì if
ë° else
ë¡ ì§ìëë©°, í¨ê» ì°ê²°í ì ììµëë¤.
let name = "kittens";
if (name === "puppies") {
name += " woof";
} else if (name === "kittens") {
name += " meow";
} else {
name += "!";
}
name === "kittens meow";
JavaScriptìë elif
ê° ìì¼ë©°, else if
ë ë¨ì¼ if
문ì¼ë¡ 구ì±ë else
ë¶ê¸°ì ë¶ê³¼í©ëë¤.
JavaScriptë while
ë°ë³µë¬¸ê³¼ do...while
ë°ë³µë¬¸ë ì¬ì©í ì ììµëë¤. ì ìë 기본 ë°ë³µì ì ì©íê² ì¬ì©í ì ìê³ , íìë ë°ë³µë¬¸ì ì ì´ë íë² ì´ìì ì¤ííê³ ì¶ì ë ì¬ì©í ì ììµëë¤.
while (true) {
// 무í루í!
}
let input;
do {
input = get_input();
} while (inputIsNotValid(input));
JavaScriptì for
ë°ë³µë¬¸ì Cì Javaì ë°ë³µë¬¸ê³¼ ê°ìµëë¤. ë§íìë©´, ë°ë³µë¬¸ì íìí ì ì´ ì 보를 í ì¤ì ííí ì ìë¤ë ì´ì¼ê¸°ì§ì.
for (let i = 0; i < 5; i++) {
// ë´ë¶ ëìì 5ë² ë°ë³µí©ëë¤
}
JavaScriptìë ëê°ì ì¤ìí for ë°ë³µë¬¸ ëí í¬í¨ë©ëë¤. iterables(í¹í ë°°ì´)를 ë°ë³µíë for...of
, ê°ì²´ì 모ë enumerable ìì±ì 방문íë for...in
ì
ëë¤.
for (const value of array) {
// valueë¡ ìì
ìíí©ëë¤.
}
for (const property in object) {
// ê°ì²´ íë¡í¼í°ë¡ ìì
ìíí©ëë¤.
}
switch
문ì ëë± ê²ì¬ë¥¼ 기ë°ì¼ë¡ ì¬ë¬ ë¶ê¸°ì ì¬ì©í ì ììµëë¤.
switch (action) {
case "draw":
drawIt();
break;
case "eat":
eatIt();
break;
default:
doNothing();
}
Cì ì ì¬íê², case ì ì labelsê³¼ ê°ë
ì ì¼ë¡ ëì¼íë¯ë¡, break
문ì ì¶ê°íì§ ìì¼ë©´ ì¤íì´ ë¤ì ë¨ê³ë¡ "ëì´ê°ëë¤". ê·¸ë¬ë ì´ë¤ì ì¤ì ë¡ ì í í
ì´ë¸ì´ ìëëë¤. 문ìì´ì´ë ì«ì 리í°ë´ ë¿ë§ ìëë¼, 모ë ííìì´ case
ì ì ì¼ë¶ê° ë ì ìì¼ë©°, íëê° ì¼ì¹íë ê°ê³¼ ê°ì ëê¹ì§ íëì© íê°ë©ëë¤. ===
ì°ì°ì를 ì¬ì©íì¬ ë ì¬ì´ìì ë¹êµê° ì´ë£¨ì´ì§ëë¤.
Rustì ê°ì ì¼ë¶ ì¸ì´ì ë¬ë¦¬, ì ì´ íë¦ êµ¬ì¡°ë JavaScriptì 문ì
ëë¤. ì¦, const a = if (x) { 1 } else { 2 }
ì ê°ì´ ë³ìì í ë¹í ì ììµëë¤.
JavaScript ì¤ë¥ë try...catch
문ì ì¬ì©íì¬ ì²ë¦¬ë©ëë¤.
try {
buildMySite("./website");
} catch (e) {
console.error("Building site failed:", e);
}
ìë¬(Error)ë throw
문ì ì¬ì©íì¬ ë°ìí ì ììµëë¤. ë§ì 기본 ì ê³µ ìì
ë ìë¬ê° ë°ìí ì ììµëë¤.
function buildMySite(siteDirectory) {
if (!pathExists(siteDirectory)) {
throw new Error("Site directory does not exist");
}
}
ì¼ë°ì ì¼ë¡, ë°©ê¸ ì¡ì ì¤ë¥ì íì
ì ì ì ììµëë¤. throw
문ìì 무ìì´ë ë°ìí ì ì기 ë문ì
ëë¤. ê·¸ë¬ë ì¼ë°ì ì¼ë¡ ìì ìì ê°ì´ Error
ì¸ì¤í´ì¤ë¼ê³ ê°ì í ì ììµëë¤. TypeError
ë° RangeError
ì ê°ì Error
ë´ì¥ íì í´ëì¤ê° ìëë°, ì¤ë¥ì ëí ì¶ê°ì ì¸ ì미체ê³ë¥¼ ì ê³µíë ë° ì¬ì©í ì ììµëë¤. JavaScriptìë ì¡°ê±´ë¶ í¬ì°©ì´ ììµëë¤. í ê°ì§ì íì
ì ì¤ë¥ë§ ì²ë¦¬íë ¤ë©´, 모ë ê²ì í¬ì°©íê³ instanceof
를 ì¬ì©í´ ì¤ë¥ íì
ì ìë³í´ì¼ íê³ , ê·¸ë° ë¤ì ë¤ë¥¸ case를 ë¤ì ëì ¸ì¼ í©ëë¤.
try {
buildMySite("./website");
} catch (e) {
if (e instanceof RangeError) {
console.error("Seems like a parameter is out of range:", e);
console.log("Retrying...");
buildMySite("./website");
} else {
// ë¤ë¥¸ ìë¬ íì
ì ì²ë¦¬íë ë°©ë²ì 모ë¦
ëë¤.
// í¸ì¶ ì¤íì ë¤ë¥¸ ë¶ë¶ìì ìë¬ë¥¼ ì¡ìì ì²ë¦¬í ì ìëë¡ ëì§ì¸ì.
throw e;
}
}
í¸ì¶ ì¤íì try...catch
ìì ìë¬ë¥¼ í¬ì°©íì§ ëª»íë©´, íë¡ê·¸ë¨ì´ ì¢
ë£ë©ëë¤.
ì ì´ íë¦ë¬¸ì ì ì²´ 목ë¡ì 참조 ì¹ì ì 참조íì¸ì.
ê°ì²´ (Objects)JavaScript ê°ì²´ë ê°ë¨í ì´ë¦-ê° ì(name-value pairs)ì 모ìì ëë¤. ë°ë¼ì JavaScriptì ê°ì²´ì 모ìì ë¤ìê³¼ ë¹ì·í©ëë¤.
JavaScriptì ê°ì²´ë í´ì(hashes)ì ëë¤. ì ì ì¼ë¡ íì ì´ ì§ì ë ì¸ì´ì ê°ì²´ì ë¬ë¦¬, JavaScriptì ê°ì²´ë 모ìì´ ê³ ì ëì´ ìì§ ììµëë¤. ìì±ì ì¸ì ë ì§ ì¶ê°, ìì , ì¬ì ë ¬, ë³ê²½ ëë ëì ì¼ë¡ 쿼리í ì ììµëë¤. ê°ì²´ í¤ë íì strings ëë 기í¸(symbols)ì ëë¤. ì ìì¸ ë°°ì´ ì¸ë±ì¤ë ì¤ì ë¡ë 문ìì´ì ëë¤.
ê°ì²´ë ì¼ë°ì ì¼ë¡ 리í°ë´ 구문ì ì¬ì©íì¬ ìì±ë©ëë¤.
const obj = {
name: "Carrot",
for: "Max",
details: {
color: "orange",
size: 12,
},
};
ê°ì²´ ìì±ì ì (.
) ëë ëê´í¸([]
)를 ì¬ì©íì¬ ì ê·¼í ì ììµëë¤. ì í기ë²ì ì¬ì©í ë, í¤ë ì í¨í ìë³ìì¬ì¼ í©ëë¤. ë°ë©´ ëê´í¸ë¥¼ ì¬ì©íë©´ ëì í¤ ê°ì¼ë¡ ê°ì²´ë¥¼ ì¸ë±ì±í ì ììµëë¤.
// ì í기ë²
obj.name = "Simon";
const name = obj.name;
// ëê´í¸ í기ë²
obj["name"] = "Simon";
const name = obj["name"];
// ë³ì를 ì¬ì©íì¬ í¤ë¥¼ ì ìí ì ììµëë¤.
const userName = prompt("what is your key?");
obj[userName] = prompt("what is its value?");
ìì± ì ê·¼ì í¨ê» ì°ê²°í ì ììµëë¤.
obj.details.color; // orange
obj["details"]["size"]; // 12
ê°ì²´ë íì 참조ì´ë¯ë¡, 무ì¸ê° ëª ìì ì¼ë¡ ê°ì²´ë¥¼ ë³µì¬íì§ ìë í, ê°ì²´ì ëí ë³íì ì¸ë¶ìì ë³¼ ì ììµëë¤.
const obj = {};
function doSomething(o) {
o.x = 1;
}
doSomething(obj);
console.log(obj.x); // 1
ì´ë ëí ë³ëë¡ ìì±ë ë ê°ì²´ê° ìë¡ ë¤ë¥¸ 참조ì´ê¸° ë문ì ê²°ì½ ê°ì§ ìì(!==
)ì ì미í©ëë¤. ëì¼í ê°ì²´ì ëí ë ê°ì 참조를 ë³´ì íë ê²½ì°, íë를 ë³ê²½íë©´ ë¤ë¥¸ íë를 íµí´ ê´ì°°í ì ììµëë¤.
const me = {};
const stillMe = me;
me.x = 1;
console.log(stillMe.x); // 1
ê°ì²´ ë° íë¡í íì
ì ëí ìì¸í ë´ì©ì, ê°ì²´
참조 íì´ì§ë¥¼ 참조íì¸ì. ê°ì²´ ì´ê¸°í 구문ì ëí ìì¸í ë´ì©ì 참조 íì´ì§ë¥¼ ì°¸ê³ íì¸ì.
ì¼ë°ì ì¼ë¡ (ëí´íë¤ê³ ë¤ìì ì ìë) 기본 ë©ì»¤ëì¦ì ê±´ëë¦¬ì§ ìê³ í´ëì¤ë¥¼ ì¬ì©íì¬ ììì ë¬ì±í ì ì기 ë문ì, ì´ íì´ì§ììë ê°ì²´ íë¡í íì ë° ììì ëí 모ë ì¸ë¶ ì 보를 ìëµíìµëë¤. ìì¸í ë´ì©ì ìì ë° íë¡í íì ì²´ì¸ì 참조íì¸ì.
ë°°ì´ (Arrays)JavaScriptìì ë°°ì´ì ì¤ì ë¡ë í¹ë³í íì
ì ê°ì²´ì
ëë¤. (ì«ìë¡ ëíë¸ ìì±ì ìì°ì¤ë½ê² []
구문ë§ì ì¬ì©í´ì ì ê·¼íê² ëë¯ë¡) ì¼ë° ê°ì²´ì ë§ì´ ë¹ì·íê² ëìíì§ë§, ì´ ê°ì²´ë length
ë¼ë íê°ì§ ë§ë²ì ì¸ ìì±ì ê°ì§ëë¤. ì´ë íì ë°°ì´ìì ê°ì¥ í° ì¸ë±ì¤ë³´ë¤ íë ë í° ê°ì ê°ì§ëë¤.
ë°°ì´ì ì¼ë°ì ì¼ë¡ ë°°ì´ ë¦¬í°ë´ë¡ ìì±ë©ëë¤.
const a = ["dog", "cat", "hen"];
a.length; // 3
JavaScript ë°°ì´ì ì¬ì í ê°ì²´ì
ëë¤. ììì ì«ì ì¸ë±ì¤ë¥¼ í¬í¨íì¬ ë°°ì´ì ìì±ì í ë¹í ì ììµëë¤. ì ì¼í "ë§ë²"ì í¹ì ì¸ë±ì¤ë¥¼ ì¤ì í ë length
ê° ìëì¼ë¡ ì
ë°ì´í¸ ëë¤ë ê²ì
ëë¤.
const a = ["dog", "cat", "hen"];
a[100] = "fox";
console.log(a.length); // 101
console.log(a); // ['dog', 'cat', 'hen', empty à 97, 'fox']
ììì ì»ì ë°°ì´ì í¬ì ë°°ì´(sparse array)ë¼ê³ í©ëë¤. ì¤ê°ì ë¹ì´ìë ì¬ë¡¯ì´ ì기 ë문ì´ë©° ìì§ì´ ë°°ì´ìì í´ì í ì´ë¸ë¡ ë°°ì´ì ìµì ííì§ ì기 ë문ì ëë¤. ë°°ì´ì´ ë°ì§ëì´ ìëì§ íì¸íì¸ì!
ë²ì를 ë²ì´ë ì¸ë±ì±ì ë°ìíì§ ììµëë¤. ì¡´ì¬íì§ ìë ë°°ì´ ì¸ë±ì¤ë¥¼ 참조íë ¤ê³ íë©´ undefined
ê°ì´ ë°íë©ëë¤.
const a = ["dog", "cat", "hen"];
console.log(typeof a[90]); // undefined
ë°°ì´ì 모ë ìì를 ê°ì§ ì ìì¼ë©° ììë¡ íì¥íê±°ë ì¶ìí ì ììµëë¤.
const arr = [1, "foo", true];
arr.push({});
// arr = [1, "foo", true, {}]
ë°°ì´ì ë¤ë¥¸ C ì ì¬ ì¸ì´ììì ë§ì°¬ê°ì§ë¡ for
루íë¡ ë°ë³µë ì ììµëë¤.
for (let i = 0; i < a.length; i++) {
// a[i]ì ê°ì§ê³ ìì
ì§í
}
ë°°ì´ì ëí ë°ë³µ ê°ë¥íë¯ë¡, C++/Javaì for (int x : arr)
문ë²ì ëì¼í for...of
루í를 ì¬ì©í ì ììµëë¤.
for (const currentValue of a) {
// currentValue를 ê°ì§ê³ ìì
ì§í
}
ë°°ì´ìë ë°°ì´ ë©ìëê° ë§ì´ ììµëë¤. ëë¶ë¶ì ë°°ì´ì ìíí©ëë¤. ì를 ë¤ì´, map()
ì 모ë ë°°ì´ ììì ì½ë°±ì ì ì©íê³ ì ë°°ì´ì ë°íí©ëë¤.
const babies = ["dog", "cat", "hen"].map((name) => `baby ${name}`);
// babies = ['baby dog', 'baby cat', 'baby hen']
í¨ì (Functions)
ê°ì²´ì ë§ì°¬ê°ì§ë¡, í¨ìë JavaScript를 ì´í´íëë° íµì¬ì´ ëë ì»´í¬ëí¸ì ëë¤. ê°ì¥ 기본ì ì¸ í¨ìì ììë ë¤ìê³¼ ê°ìµëë¤.
function add(x, y) {
const total = x + y;
return total;
}
JavaScript í¨ìë 0ê° ì´ìì ì´ë¦ì´ ìë 매ê°ë³ì를 ê°ì§ ì ììµëë¤. í¨ìì 본체ìë ìíë ë§í¼ 구문ì ìì±í ì ìê³ í´ë¹ í¨ìì ì§ìì ì¸ ë³ì를 ì ì¸í ì ììµëë¤. return
문ì ì¸ì ë ì§ ê°ì ë°ííê³ í¨ì를 ì¢
ë£í ì ììµëë¤. ë°í ë¬¸ì´ ìì¼ë©´ (í¹ì ê°ì´ ìë ë°íì´ ì¬ì©ëë©´), JavaScriptë undefined
ì ë°íí©ëë¤.
매ê°ë³ìë¡ ì§ì ë ê²ë³´ë¤ ë§ê±°ë ì ì ë³ì를 ì¬ì©í´ìë í¨ì를 í¸ì¶í ì ììµëë¤. ììëë 매ê°ë³ì를 ì ë¬íì§ ìê³ í¨ì를 í¸ì¶íë©´ undefined
ë¡ ì¤ì ë©ëë¤. ììë³´ë¤ ë§ì 매ê°ë³ì를 ì ë¬íë©´ ì¶ê°ë¡ ì ë¬ëë 매ê°ë³ì를 무ìí©ëë¤.
add(); // NaN
// add(undefined, undefined)ì ëë±í©ëë¤.
add(2, 3, 4); // 5
// ì²ìì ë ìê° ëí´ì§ëë¤. 4ë 무ìë©ëë¤.
ì¬ì©í ì ìë ë¤ë¥¸ ì¬ë¬ 매ê°ë³ì êµ¬ë¬¸ì´ ììµëë¤. ì를 ë¤ì´, rest 매ê°ë³ì 구문ì ì¬ì©íë©´ Pythonì *args
ì ì ì¬íê² í¸ì¶ìê° ì ë¬í 모ë ì¶ê° 매ê°ë³ì를 ë°°ì´ë¡ ìì§í ì ììµëë¤(JSë ì¸ì´ ìì¤ìì ëª
ëª
ë 매ê°ë³ìê° ì기 ë문ì, **kwargs
ê° ììµëë¤).
function avg(...args) {
let sum = 0;
for (const item of args) {
sum += item;
}
return sum / args.length;
}
avg(2, 3, 4, 5); // 3.5
ìì ì½ëìì args
ë³ìë í¨ìì ì ë¬ë 모ë ê°ì ë³´ì í©ëë¤.
ëë¨¸ì§ ë§¤ê°ë³ì(rest parameter)ë ì ì¸ë ì´íì 모ë ì¸ì를 ì ì¥íì§ë§, ì´ì ìë ì ì¥íì§ ììµëë¤. ì¦, function avg(firstValue, ...args)
ë í¨ìì ì ë¬ë 첫 ë²ì§¸ ê°ì firstValue
ë³ìì ì ì¥íê³ ëë¨¸ì§ ì¸ìë args
ì ì ì¥í©ëë¤.
í¨ìê° ì¸ì 목ë¡ì íì©íê³ ì´ë¯¸ ë°°ì´ì ë³´ì íê³ ìë ê²½ì°, í¨ì í¸ì¶ìì ì ê° ì°ì°ì 문ë²(spread syntax)ì ì¬ì©íì¬ ë°°ì´ì ìì 목ë¡ì¼ë¡ spread í ì ììµëë¤. ì를 ë¤ì´, avg(...numbers)
JavaScriptìë ëª ëª ë ë§¤ê° ë³ìê° ìë¤ê³ ì¸ê¸íìµëë¤. íì§ë§ ê°ì²´ë¥¼ í¸ë¦¬íê² íëë¡ í©ì¹ê³ , ë¶í´í ì ìë 구조 ë¶í´ í ë¹ì ì¬ì©íì¬ êµ¬íí ì ììµëë¤.
// ì¤ê´í¸({ })ì ì ìíì¸ì. ê°ì²´ë¥¼ ë¶í´í©ëë¤.
function area({ width, height }) {
return width * height;
}
// ì¬ê¸°ì ì¤ê´í¸({ })ë ìë¡ì´ ê°ì²´ë¥¼ ìì±í©ëë¤.
console.log(area({ width: 2, height: 3 }));
ê¸°ë³¸ê° ë§¤ê°ë³ì 구문ë ìëë°, ìëµë 매ê°ë³ì(ëë undefined
ë¡ ì ë¬ë 매ê°ë³ì)ê° ê¸°ë³¸ê°ì ê°ëë¡ íì©í©ëë¤.
function avg(firstValue, secondValue, thirdValue = 0) {
return (firstValue + secondValue + thirdValue) / 3;
}
avg(1, 2); // NaN ëì , 1ì
ëë¤.
ìµëª
í¨ì
JavaScriptììë ìµëª í¨ì(ì´ë¦ì´ ìë í¨ì)를 ë§ë¤ ì ììµëë¤. ì¤ì ë¡, ì´ë° ì´ë¦ìë í¨ìë¤ì ë¤ë¥¸ í¨ìì ì¸ìë¡ ì ë¬íê±°ë í¨ì를 í¸ì¶íë ë° ì¬ì©í ì ìë ë³ìì ì¦ì í ë¹ëê±°ë ë¤ë¥¸ í¨ììì ë°íë©ëë¤.
// ê´í¸ ìì í¨ìëª
ì´ ììì 주목í´ì£¼ì¸ì.
const avg = function (...args) {
let sum = 0;
for (const item of args) {
sum += item;
}
return sum / args.length;
};
ìì ì ìë ìµëª
í¨ìë ì¸ìì í¨ê» avg()
ì ê°ì ííë¡ ì¤íí ì ììµëë¤. ì¦, function avg() {}
ì ê°ì´ ì´ë¦ì ë¶ì¸ í¨ì ì ì¸ê³¼ ì미ì ì¼ë¡ ê°ìµëë¤.
íì´í í¨ì를 ì¬ì©íì¬ ìµëª í¨ì를 ì ìíë ë ë¤ë¥¸ ë°©ë²ì´ ììµëë¤.
// ê´í¸ ìì í¨ìëª
ì´ ììì 주목í´ì£¼ì¸ì.
const avg = (...args) => {
let sum = 0;
for (const item of args) {
sum += item;
}
return sum / args.length;
};
// ë¨ìí ííìì ë°íí ë, `return`ì ìëµí ì ììµëë¤.
const sum = (a, b, c) => a + b + c;
íì´í í¨ìë ì미ì ì¼ë¡ í¨ì ííìê³¼ ëì¼íì§ ììµëë¤. ìì¸í ë´ì©ì 참조 íì´ì§ë¥¼ 참조íì¸ì.
ìµëª í¨ìê° ì ì©í ì ìë ë ë¤ë¥¸ ë°©ë²ì´ ììµëë¤. ì¦ì ì¤í í¨ì íí(IIFE, Immediately Invoked Function Expressions)ì´ë¼ë ë¨ì¼ ííììì ìµëª í¨ì를 ëìì ì ì¸íê³ í¸ì¶í ì ììµëë¤.
(function () {
// â¦
})();
IIFEì ì¬ì© ì¬ë¡ì ëí´ìë í´ë¡ì 를 ì´ì©í´ì íë¼ì´ë¹ ë©ìë íë´ë´ê¸°ì 참조íì¸ì.
ì¬ê· í¨ìJavaScriptë ì¬ê·ì ì¼ë¡ í¨ì를 í¸ì¶í ì ììµëë¤. ì´ë ë¸ë¼ì°ì DOM ë±ìì ë³¼ ì ìë í¸ë¦¬ 구조를 ë¤ë£¨ëë° ì ì©í©ëë¤.
function countChars(elm) {
if (elm.nodeType === 3) {
// TEXT_NODE
return elm.nodeValue.length;
}
let count = 0;
for (let i = 0, child; (child = elm.childNodes[i]); i++) {
count += countChars(child);
}
return count;
}
í¨ì ííììë ì´ë¦ì ì§ì í ì ìì¼ë¯ë¡, ì¬ê·ì ì¼ ì ììµëë¤.
const charsInBody = (function counter(elm) {
if (elm.nodeType === 3) {
// TEXT_NODE
return elm.nodeValue.length;
}
let count = 0;
for (let i = 0, child; (child = elm.childNodes[i]); i++) {
count += counter(child);
}
return count;
})(document.body);
ìì ê°ì´ í¨ì ííìì ì ê³µë ì´ë¦ì í¨ì ìì²´ ë²ìììë§ ì¬ì©í ì ììµëë¤. ì´ë¥¼ íµí´ ìì§ìì ë ë§ì ìµì í를 ìíí ì ìì¼ë©°, ê²°ê³¼ì ì¼ë¡ ë ì½ê¸° ì¬ì´ ì½ëê° ìì±ë©ëë¤. ì´ ì´ë¦ì ëë²ê±°ì ì¼ë¶ ì¤í ì¶ì ìë íìëë¯ë¡, ëë²ê¹ ì ìê°ì ì ì½í ì ììµëë¤.
í¨ìí íë¡ê·¸ëë°ì ìµìíë¤ë©´ JavaScriptìì ì¬ê·ê° ì±ë¥ì 미ì¹ë ìí¥ì 주ìíì¸ì. ì¸ì´ ëª ì¸ìë 꼬리 í¸ì¶ ìµì í(tail-call optimization)ë¡ ì§ì ëì´ ìì§ë§, ì¤í ì¶ì ë° ëë²ê¹ ì ì´ë ¤ìì¼ë¡ ì¸í´ JavaScriptCore (Safariìì ì¬ì©)ììë§ êµ¬ííìµëë¤. ê¹ì ì¬ê·ì ê²½ì° ì¤í ì¤ë²íë¡ì°ë¥¼ ë°©ì§í기 ìí´, ëì ë°ë³µì ì¬ì©íë ê²ì´ ì¢ìµëë¤.
í¨ìë ì¼ê¸ ê°ì²´(first-class objects)ì ëë¤JavaScript í¨ìë ì¼ê¸ ê°ì²´(first-class objects)ì ëë¤. ì¦, ë³ìì í ë¹íê³ ë¤ë¥¸ í¨ìì ì¸ìë¡ ì ë¬íê³ ë¤ë¥¸ í¨ììì ë°íí ì ììµëë¤. ëí, JavaScriptë ëª ìì ì¸ ìº¡ì² ìì´ ì¦ì ì¬ì© ê°ë¥í í´ë¡ì (closures)를 ì§ìíë¯ë¡ í¨ìí íë¡ê·¸ëë° ì¤íì¼ì í¸ë¦¬íê² ì ì©í ì ììµëë¤.
// í¨ì를 ë°ííë í¨ì
const add = (x) => (y) => x + y;
// í¨ì를 매ê°ë³ìë¡ ë°ë í¨ì
const babies = ["dog", "cat", "hen"].map((name) => `baby ${name}`);
JavaScript í¨ìë JavaScriptì ë¤ë¥¸ 모ë ê²ê³¼ ë§ì°¬ê°ì§ë¡ ê·¸ ìì²´ë¡ ê°ì²´ì´ë©°, ì´ì ê°ì²´ ì¹ì ìì 본 ê²ì²ë¼ ìì±ì ì¶ê°íê±°ë ë³ê²½í ì ììµëë¤.
ë´ì¥ í¨ì (Inner functions)JavaScriptì í¨ì ì ì¸ì ë¤ë¥¸ í¨ì ë´ë¶ììë ê°ë¥í©ëë¤. JavaScriptì ì¤ì²© í¨ìììë ë¶ëª¨ í¨ì ë²ìì ìë ë³ìì ì ê·¼ì´ ê°ë¥íë¤ë ê² ì¤ìí©ëë¤.
function parentFunc() {
const a = 1;
function nestedFunc() {
const b = 4; // parentFuncì ì¬ì©í ì ìë ë³ì
return a + b;
}
return nestedFunc(); // 5
}
ì´ë° í¹ì±ì ì ì§ë³´ìê° ì©ì´í ì½ë를 ë§ëëë° ëìì´ ë©ëë¤. í¸ì¶ë í¨ìê° ë¤ë¥¸ íë ê°ì í¨ìììë§ í¸ì¶ëë©° ê·¸ ì¸ì ë¤ë¥¸ ì½ëììë ì¬ì©ì´ ìëë ê²½ì°, í´ë¹ í¨ì를 ë´ë¶ì ì¤ì²©ìí¬ ì ììµëë¤. ì´ë° ë°©ë²ì íµí´ ì ì ë²ìì í¨ìì ê°ìê° ì¤ì´ëëë¤.
ëí ì ì ë³ìì ëí ì í¹ì ë¿ë¦¬ì¹ ì ìë ì¢ì ëìì´ ë©ëë¤. ë³µì¡í ì½ë를 ìì±íê² ë ëë©´ ì¬ë¬ í¨ìë¤ ê°ì ê°ì ê³µì í기 ìí ì©ëë¡ ì ì ë³ì를 ì¬ì©íê³ ì¶ì´ì§ì§ë§, ì ì ë³ìë ì ì§ë³´ì를 íë¤ê² í©ëë¤. ì´ë° ìí©ì ì¤ì²© í¨ìë ë¶ëª¨ì ë³ì를 ê³µì í¨ì¼ë¡ì¨ ì ì ì´ë¦ê³µê°ì ëë½íì§ ìê³ í¨ìë¤ì ì°ëí ì ììµëë¤.
í´ëì¤JavaScriptë Javaì ë§¤ì° ì ì¬í class 문ë²ì ì ê³µí©ëë¤.
class Person {
constructor(name) {
this.name = name;
}
sayHello() {
return `Hello, I'm ${this.name}!`;
}
}
const p = new Person("Maria");
console.log(p.sayHello());
JavaScript í´ëì¤ë new
ì°ì°ìë¡ ì¸ì¤í´ì¤íí´ì¼ íë í¨ìì¼ ë¿ì
ëë¤. í´ëì¤ê° ì¸ì¤í´ì¤íë ëë§ë¤, í´ëì¤ê° ì§ì í ë©ìëì ìì±ì í¬í¨íë ê°ì²´ë¥¼ ë°íí©ëë¤. í´ëì¤ë ì½ë 구ì±ì ê°ì íì§ ììµëë¤. ì를 ë¤ì´, í´ëì¤ë¥¼ ë°ííë í¨ìê° ìê±°ë, íì¼ ë¹ ì¬ë¬ í´ëì¤ê° ìì ì ììµëë¤. ë¤ìì í´ëì¤ ìì±ì´ ì´ë»ê² ììë°©í¸ì¼ ì ìëì§ì ëí ììì
ëë¤. ë¨ì§ íì´í í¨ììì ë°íë ííìì¼ ë¿ì´ê³ , ì´ í¨í´ì 믹ì¤ì¸(mixin)ì´ë¼ê³ í©ëë¤.
const withAuthentication = (cls) =>
class extends cls {
authenticate() {
// â¦
}
};
class Admin extends withAuthentication(Person) {
// â¦
}
ì ì ìì±ì static
ì ì¶ê°íì¬ ìì±ë©ëë¤. Private ìì±ì hash(#
) (private
í¤ìëê° ìëëë¤)를 ìì ì¶ê°íì¬ ìì±ë©ëë¤. ì´ í´ìë ìì± ì´ë¦ì íìì ì¸ ë¶ë¶ì
ëë¤. (Pythonìì #
ì _
ë¡ ìê°íì¸ì.) ëë¶ë¶ì ë¤ë¥¸ ì¸ì´ì ë¬ë¦¬, í´ëì¤ ë³¸ì²´ ì¸ë¶ìì Private ìì±ì ì½ì ì ìë ë°©ë²ì´ ì í ììµëë¤. íì í´ëì¤(derived classes)ììë ë§ì°¬ê°ì§ì
ëë¤.
ë¤ìí í´ëì¤ ê¸°ë¥ì ëí ìì¸í ìë´ë guide page를 참조íì¸ì.
ë¹ë기 íë¡ê·¸ëë°JavaScriptë 본ì§ì ì¼ë¡ ë¨ì¼ ì¤ë ëì ëë¤. ë³ë ¬íê° ìê³ , ëìì±ë§ ê°ë¥í©ëë¤. ë¹ë기 íë¡ê·¸ëë°ì ì´ë²¤í¸ 루íì ìí´ êµ¬ëëë©°, ì´ë¥¼ íµí´ ì¼ë ¨ì ìì ì ë기íê³ ìë£ë¥¼ ìí´ í´ë§(polling)í ì ììµëë¤.
JavaScriptìì ë¹ë기 ì½ë를 ìì±íë ì¸ ê°ì§ì ê´ì©ì ì¸ ë°©ë²ì´ ììµëë¤.
setTimeout()
)Promise
ê¸°ë° ë°©ë²async
/await
ë°©ë²ì를 ë¤ì´, íì¼ ì½ê¸° ìì ì´ JavaScriptìì ë¤ìê³¼ ê°ì´ íìë ì ììµëë¤.
// ì½ë°± 기ë°(Callback-based)
fs.readFile(filename, (err, content) => {
// ì´ ì½ë°±ì íì¼ì ì½ì ë í¸ì¶ëë©° ì ì íì í¸ì¶ë ì ììµëë¤.
if (err) {
throw err;
}
console.log(content);
});
// íì¼ ì½ê¸°ë¥¼ 기ë¤ë¦¬ë ëì ì¬ê¸°ì ì½ëê° ì¤íë©ëë¤.
// íë¡ë¯¸ì¤ 기ë°(Promise-based)
fs.readFile(filename)
.then((content) => {
// íì¼ì ì½ì ë ìíí ìì
console.log(content);
})
.catch((err) => {
throw err;
});
// íì¼ ì½ê¸°ë¥¼ 기ë¤ë¦¬ë ëì ì¬ê¸°ì ì½ëê° ì¤íë©ëë¤.
// Async/await 기ë°
async function readFile(filename) {
const content = await fs.readFile(filename);
console.log(content);
}
ì¸ì´ì ì¤ìí ë¶ë¶ì ì´ë í ë¹ë기 íë¡ê·¸ëë° ê¸°ë¥ì í¹ì íì§ ìì§ë§, ì¬ì©ì ê¶í ìì²ë¶í°, ë°ì´í° ê°ì ¸ì¤ê¸° ë° íì¼ ì½ê¸°ê¹ì§ ì¸ë¶ í경과 ìí¸ìì©ì í ë ì¤ìí©ëë¤. ì ì¬ì ì¼ë¡ ì¤ë ì¤íëë ìì ì ë¹ë기ìì¼ë¡ ì ì§íë©´, ì´ íë¡ì¸ì¤ê° ë기íë ëì ë¤ë¥¸ íë¡ì¸ì¤ê° ê³ì ì¤íë ì ììµëë¤. ì를 ë¤ì´, ì¬ì©ìê° ê¶íì ë¶ì¬í기 ìí´ ë²í¼ì í´ë¦í기를 기ë¤ë¦¬ë ëì, ë¸ë¼ì°ì ê° ì ì§ëì§ ììµëë¤.
ë¹ë기 ê°ì´ ìë ê²½ì°, í´ë¹ ê°ì ë기ì ì¼ë¡ ê°ì ¸ì¬ ì ììµëë¤. ì를 ë¤ì´, íë¡ë¯¸ì¤(Promise)ê° ìë ê²½ì°, then()
ë©ìë를 íµí´ìë§ ìµì¢
ê²°ê³¼ì ì ê·¼í ì ììµëë¤. ë§ì°¬ê°ì§ë¡, await
ë ì¼ë°ì ì¼ë¡ ë¹ë기 í¨ì ëë 모ëì¸, ë¹ë기 컨í
ì¤í¸(ë§¥ë½)ììë§ ì¬ì©í ì ììµëë¤. Promiseë ì ëë¡ "ì°¨ë¨"ëì§ ììµëë¤. Promiseì ê²°ê³¼ì ë°ë¼ ë¬ë¼ì§ë ë
¼ë¦¬ë§ ì°ê¸°ë©ëë¤. ê·¸ ëì ë¤ë¥¸ 모ë ìì
ì ê³ì ì¤íë©ëë¤. í¨ìí íë¡ê·¸ë머ë¼ë©´, Promise를 then()
ì¼ë¡ 매íí ì ìë 모ëë(monads)ë¡ ìê°í ì ììµëë¤(íì§ë§, ì ì í 모ëëê° ìë ì´ì ë ìë íë©´íë기 ë문ì
ëë¤. ì¦, Promise<Promise<T>>
를 ê°ì§ ì ììµëë¤).
ì¬ì¤, ë¨ì¼ ì¤ë ë 모ë¸ì Non-Blocking IOë¡ ì¸í´ Node.js를 ìë² ì¸¡ íë¡ê·¸ëë°ì ë리 ì ííê² íì¬, ë§ì ìì ë°ì´í°ë² ì´ì¤ ëë íì¼ ìì¤í ìì²ì ë§¤ì° í¨ì¨ì ì¼ë¡ ì²ë¦¬í ì ìê² í©ëë¤. ê·¸ë¬ë, ììí JavaScriptì¸ CPU ë°ì¸ë©(ê³ì° ì§ì½ì ) ìì ì ì¬ì í ë©ì¸ ì¤ë ë를 ì°¨ë¨í©ëë¤. ì¤ì ë³ë ¬í를 ë¬ì±íë ¤ë©´ workers를 ì¬ì©í´ì¼ í ìë ììµëë¤.
ë¹ë기 íë¡ê·¸ëë°ì ëí´ ìì¸í ììë³´ë ¤ë©´, promises ì¬ì©ì ëí´ ì½ì´ë³´ê±°ë ë¹ë기 JavaScript ììµì를 ì½ì´ë³´ì¸ì.
모ëëí JavaScriptë ëë¶ë¶ì ë°íììì ì§ìíë 모ë ìì¤í
ì ì¬ì©í©ëë¤. 모ëì ì¼ë°ì ì¼ë¡ íì¼ ê²½ë¡ ëë URLë¡ ìë³ëë íì¼ì
ëë¤. import
ë° export
를 모ë ê°ì ë°ì´í°ë¥¼ êµííë ëª
ë ¹ë¬¸ì¼ë¡ ì¬ì©í ì ììµëë¤.
import { foo } from "./foo.js";
// export íì§ ìì ë³ìë 모ë ë´ìì ì§ì ë³ì ë²ì를 ê°ì§ëë¤.
const b = 2;
export const a = 1;
Haskell, Python, Java ë±ê³¼ ë¬ë¦¬ JavaScript 모ë í´ìì ì ì ì¼ë¡ í¸ì¤í¸ ì ìì ëë¤. ì¼ë°ì ì¼ë¡ URL ëë íì¼ ê²½ë¡ë¥¼ 기ë°ì¼ë¡ íë¯ë¡, ìë íì¼ ê²½ë¡ë "ìë"íê³ ì¼ë¶ íë¡ì í¸ ë£¨í¸ ê²½ë¡ ëì íì¬ ëª¨ëì ê²½ë¡ì ìëì ì ëë¤.
ê·¸ë¬ë, JavaScript ì¸ì´ë íì¤ ë¼ì´ë¸ë¬ë¦¬ 모ëì ì ê³µíì§ ììµëë¤. ëì 모ë íµì¬ 기ë¥ì Math
ë° Intl
ê³¼ ê°ì ì ì ë³ìë¡ êµ¬ëë©ëë¤. ì´ê²ì 모ë ìì¤í
ì´ ìë JavaScriptì ì¤ë ìì¬ì, 모ë ìì¤í
ì ì ííë¤ë©´ ë°íì ì¤ì ì ëí ì¼ë¶ ë³ê²½ì´ í¬í¨ëë¤ë ì¬ì¤ ë문ì
ëë¤.
ë¤ë¥¸ ë°íìì ë¤ë¥¸ 모ë ìì¤í ì ì¬ì©í ì ììµëë¤. ì를 ë¤ì´, Node.jsë í¨í¤ì§ ê´ë¦¬ì npmì ì¬ì©íê³ , ëë¶ë¶ íì¼ ìì¤í 기ë°ì¸ ë°ë©´, Deno ë° ë¸ë¼ì°ì ë ìì í URL 기ë°ì´ë©° 모ëì HTTP URLìì íì¸í ì ììµëë¤.
ìì¸í ë´ì©ì 모ë ê°ì´ë íì´ì§ë¥¼ 참조íì¸ì.
ì¸ì´ ë° ë°íìì´ íì´ì§ ì ì²´ì 걸ì³, í¹ì 기ë¥ì "ì¸ì´ ìì¤"ì´ê³ ë¤ë¥¸ 기ë¥ì "ë°íì ìì¤"ì´ë¼ê³ ì§ìì ì¼ë¡ ì¸ê¸ì´ ëììµëë¤.
JavaScriptë ë²ì© ì¤í¬ë¦½í
ì¸ì´ì
ëë¤. íµì¬ ì¸ì´ ëª
ì¸ì ììí ê³ì° ë
¼ë¦¬ì ì¤ì ì ëê³ ììµëë¤. ì
ì¶ë ¥ì ì²ë¦¬íì§ ììµëë¤. ì¬ì¤, ì¶ê° ë°íì ìì¤ì API(í¹í console.log()
) ìì´, JavaScript íë¡ê·¸ë¨ì ëìì ìì í ê´ì°°í ì ììµëë¤.
ë°íì ëë í¸ì¤í¸ë JavaScript ìì§(ì¸í°í리í°)ì ë°ì´í°ë¥¼ ê³µê¸íê³ ì¶ê° ì ì ìì±ì ì ê³µíë©°, ìì§ì´ ì¸ë¶ ì¸ê³ì ìí¸ ìì©í ì ìëë¡ í ì ì ê³µí©ëë¤. 모ë íì¸, ë°ì´í° ì½ê¸°, ë©ìì§ ì¸ì, ë¤í¸ìí¬ ìì² ë³´ë´ê¸° ë±ì 모ë ë°íì ìì¤ ìì ì ëë¤. JavaScriptë ì²ìë¶í° ë¸ë¼ì°ì (DOMê³¼ ê°ì API를 ì ê³µí©ëë¤), Node.js(íì¼ ìì¤í ì 근과 ê°ì API를 ì ê³µí©ëë¤)ì ê°ì ë¤ìí íê²½ìì ì±íëììµëë¤. JavaScriptë (ê°ì¥ 주ì 목ì ì¸) ì¹, 모ë°ì¼ ì±, ë°ì¤í¬í ì±, ìë² ì¸¡ ì±, ìë²ë¦¬ì¤, ìë² ëë ìì¤í ë±ì ì±ê³µì ì¼ë¡ íµí©ëììµëë¤. JavaScript íµì¬ 기ë¥ì ëí´ ë°°ì°ë ëì, ì§ìì ì¬ì©í기 ìí´ í¸ì¤í¸ìì ì ê³µíë 기ë¥ì ì´í´íë ê²ë ì¤ìí©ëë¤. ì를 ë¤ì´, ë¸ë¼ì°ì ë° ê²½ì°ì ë°ë¼ ë¹ë¸ë¼ì°ì ì ìí´ êµ¬íëë 모ë ì¹ íë«í¼ APIì ëí´ ì½ì´ë³¼ ì ììµëë¤.
ì¶ê°ì ì¸ íìì´ íì´ì§ë ë¤ìí JavaScript 기ë¥ì´ ë¤ë¥¸ ì¸ì´ì ì´ë»ê² ë¹êµëëì§ì ëí ë§¤ì° ê¸°ë³¸ì ì¸ íµì°°ë ¥ì ì ê³µí©ëë¤. ì¸ì´ ìì²´ì ê° ê¸°ë¥ì ëìì¤ì ëí´ ìì¸í ììë³´ë ¤ë©´, JavaScript ììµì ë° JavaScript ì°¸ê³ ìì ëí´ ì½ì´ë³´ì¸ì.
ìì± ê³µê°ê³¼ ë³µì¡ì±ì¼ë¡ ì¸í´ ìëµë ì¸ì´ì ì¼ë¶ íì ë¶ë¶ì´ ìì§ë§, ì§ì ì°¾ìë³¼ ì ììµëë¤.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4