β
6.1 λ°μ΄ν° νμ
(data type)
Copy π λ°μ΄ν° νμ
μ κ°μ μ’
λ₯λ₯Ό λ§νλ€.
π μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ λ°μ΄ν° νμ
μ κ°λλ€.
ꡬλΆ
λ°μ΄ν° νμ
μ€λͺ
μ«μ. μ μμ μ€μ κ΅¬λΆ μμ΄ νλμ μ«μνμ
λ§ μ‘΄μ¬
λ
Όλ¦¬μ μ°Έ(true)κ³Ό κ±°μ§(false)
var ν€μλλ‘ μ μΈλ λ³μμ μ묡μ μΌλ‘ ν λΉλλ κ°
κ°μ΄ μλ€λ κ²μ μλμ μΌλ‘ λͺ
μν λ μ¬μ©νλ κ°
μμ νμ
μ μ μΈν λͺ¨λ κ²
β
6.2 μλ°μ€ν¬λ¦½νΈκ° μ 곡νλ νμ
μ«μ νμ
Copy μλ°μ€ν¬λ¦½νΈλΒ νλμ μ«μ νμ
λ§ μ‘΄μ¬νλ€.
ECMAScriptμ λ°λ₯΄λ©΄, μ«μ νμ
μ κ°μ μ λ°λ₯Έλ€.
μ¦, λͺ¨λ μλ₯Ό μ€μ
λ‘ μ²λ¦¬νλ€.
λ°λΌμ μλμ μν©μ μ£Όμν΄μΌνλ€.
Copy console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.1 + 0.2 == 0.3); //false
μΆκ°μ μΌλ‘ 3κ°μ§ νΉλ³ν κ°λ ννν μ μλ€.
Copy // μ«μ νμ
μ μΈ κ°μ§ νΉλ³ν κ°
console.log(10 / 0); // Infinity : μμ 무νλ
console.log(10 / -0); // -Infinity : μμ 무νλ
console.log(1 * "String"); // NaN : μ°μ μ°μ° λΆκ° (not a Number)
λ¬Έμμ΄ νμ
Copy μλ°μ€ν¬λ¦½νΈμμ λ¬Έμμ΄μ μμνμ
μ΄λ©°, λ³κ²½ λΆκ°λ₯ν(immutable) κ°μ΄λ€.
λ¬Έμμ΄μ΄ νλ² μμ±λλ©΄, κ·Έ λ¬Έμμ΄μ λ³κ²½ν μ μλ€. (feat. λ³κ²½ λΆκ°λ₯ν κ°(immutable value))
μμλ°μ΄ν('')
, ν° λ°μ΄ν("")
, λ°±ν±(``)
μΌλ‘ ν
μ€νΈλ₯Ό κ°μΌλ€.
ν
νλ¦Ώ 리ν°λ΄
Copy λ©ν° λΌμΈ λ¬Έμμ΄, ννμ μ½μ
, νκ·Έλ ν
νλ¦Ώ(tagged template) λ± νΈλ¦¬ν λ¬Έμμ΄ μ²λ¦¬ κΈ°λ₯μ μ 곡νλ€.
ES6λΆν° λμ
λ μλ‘μ΄ λ¬Έμμ΄ νκΈ°λ²μ΄λ€.
ν
νλ¦Ώ 리ν°λ΄μ λ°νμ(runtime) μ μΌλ° λ¬Έμμ΄λ‘ λ³ν
λμ΄ μ²λ¦¬λκ³ λ°±ν±(``)
μ μ¬μ©ν΄ νννλ€.
1. λ©ν°λΌμΈ λ¬Έμμ΄(muti-line string)
Copy // μΌλ° λ¬Έμμ΄ λ΄μμλ μ€λ°κΏ(κ°ν)μ΄ νμ©λμ§ μλλ€.
var str = "Hello
world";
// SyntaxError: Invaild or unexpected token
// #ν΄κ²°1οΈβ£: μΌλ° λ¬Έμμ΄ λ΄μμλ μ΄μ€μΌμ΄ν μνμ€(escape sequence)λ₯Ό μ¬μ©ν΄μΌ νλ€.
var template = '<ul>\n\t<li><a href="#">Home</a></li>\n</ul>';
console.log(template);
Copy // #ν΄κ²°2οΈβ£: λ©ν°λΌμΈ λ¬Έμμ΄ μ¬μ©π§π§
var template = `<ul>
<li><a href="#">Home</a></li>
</ul>;
console.log(template);
2. ννμ μ½μ
(expression interpolation)
λ¬Έμμ΄μ +
μ°μ°μλ₯Ό μ¬μ©ν΄ μ°κ²°ν μ μμ§λ§, ννμ μ½μ
μ ν΅ν΄ λμ± κ°λ
μ± μ’κ² μ‘°ν©ν μ μλ€.
Copy var first = "KWAK";
var last = "BOSUN";
// ES5: λ¬Έμμ΄ μ°κ²°
console.log("My name is " + last + "-" + first + "."); // My name is BOSUN-KWAK.
// ES6: ννμ μ½μ
console.log(`My name is ${last}-${first}.`); // My name is BOSUN-KWAK.
λΆλ¦¬μΈ νμ
Copy λΆλ¦¬μΈ νμ
μ κ°μ λ
Όλ¦¬μ μ°Έ, κ±°μ§μ λνλ΄λ true μ false λΏμ΄λ€.
undefined νμ
Copy undefinedλ κ°λ°μκ° μλμ μΌλ‘ ν λΉνκΈ° μν κ°μ΄ μλλΌ, μλ°μ€ν¬λ¦½νΈ μμ§μ΄ λ³μλ₯Ό μ΄κΈ°νν λ μ¬μ©νλ κ°μ΄λ€.
λ³μ μ μΈ μ, μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μ묡μ μΌλ‘ undefined
λ‘ μ΄κΈ°ννλ€.
μ¦, λ³μ μ μΈμ μν΄ ν보λ λ©λͺ¨λ¦¬ 곡κ°μ μ²μ ν λΉμ΄ μ΄λ€μ§ λκΉμ§ λΉ μν(garbage κ°)λ‘ λμ§ μκ³ undefinedλ‘ μ΄κΈ°ννλ€.
λ§μ½ μ무κ²λ μλ λΉ κ°μ μ°κ³ μΆλ€λ©΄, null
μ μ¬μ©νλ©΄ λλ€.
null νμ
Copy nullμ λ³μμ κ°μ΄ μλ€λ κ²μ μλμ μΌλ‘ λͺ
μ(μλμ λΆμ¬, intentional absence)ν λ μ¬μ©νλ€.
λ³μμ nullμ ν λΉ == λ³μκ° μ΄μ μ μ°Έμ‘°νλ κ°μ λμ΄μ μ°Έμ‘°νμ§ μκ² λ€.
μλ°μ€ν¬λ¦½νΈ μμ§μ λꡬλ μ°Έμ‘°νμ§ μλ λ©λͺ¨λ¦¬ 곡κ°μ λν΄ κ°λΉμ§ μ½λ μ
μ μνν κ²
ν¨μκ° μ ν¨ν κ°μ λ°νν μ μλ κ²½μ°μλ λͺ
μμ μΌλ‘ nullμ λ°ννλ€.
HTML μμλ₯Ό κ²μν΄ λ°ννλ document.querySelectorλ©μλκ° μ‘°ν©μ λΆν©νλ HTMLμμλ₯Ό κ²μν μ μλ κ²½μ°, μλ¬ λμ null λ°ν
Copy <!DOCTYPE html>
<html>
<body>
<script>
var element = document.querySelector(".myClass");
// HTML λ¬Έμμ myClass ν΄λμ€λ₯Ό κ°λ μμκ° μλ€λ©΄ nullμ λ°ν
console.log(element); // null
</script>
</body>
</html>
μ¬λ² νμ
Copy ES6μμ μΆκ°λ 7λ²μ§Έ νμ
μΌλ‘, λ³κ²½ λΆκ°λ₯ν(immutable) μμ νμ
κ° , λ€λ₯Έ κ°κ³Ό μ€λ³΅λμ§ μλ μ μΌλ¬΄μ΄ν κ°μ΄λ€.
μ£Όλ‘ μ΄λ¦κ³Ό μΆ©λν μνμ΄ μλ κ°μ²΄μ μ μΌν νλ‘νΌν° ν€λ₯Ό λ§λ€κΈ° μν΄ μ¬μ©νλ€.
Symbol
ν¨μλ₯Ό νΈμΆν΄ μμ±νλ€.
μμ±λ μ¬λ² κ°μ μΈλΆμ λ
ΈμΆλμ§ μκ³ λ€λ₯Έ κ°κ³Ό μ λ μ€λ³΅λμ§ μλ μ μΌλ¬΄μ΄ κ°μ΄λ€.
Copy var key = Symbol("key");
console.log(typeof key); // symbol
// κ°μ²΄ μμ±
var obj = {};
// μ΄λ¦μ΄ μΆ©λν μνμ΄ μλ μ μΌλ¬΄μ΄ν κ°μΈ μ¬λ²μ "νλ‘νΌν° ν€"λ‘ μ¬μ©
obj[key] = "value";
console.log(obj[key]); // value
κ°μ²΄ νμ
Copy μλ°μ€ν¬λ¦½νΈλ κ°μ²΄ κΈ°λ°μ μΈμ΄μ΄λ©°, μλ°μ€ν¬λ¦½νΈλ₯Ό μ΄λ£¨κ³ μλ κ±°μ λͺ¨λ κ²μ΄ κ°μ²΄λ€.
β
6.3 λ°μ΄ν° νμ
μ νμμ±
Copy 1οΈβ£Β κ°μΒ μ μ₯ν λ ν보ν΄μΌ νλ "λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°"λ₯Ό κ²°μ νκΈ° μν΄μ
2οΈβ£ κ°μΒ μ°Έμ‘°ν λ ν λ²μ μ½μ΄ λ€μ¬μΌ ν "λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°"λ₯Ό κ²°μ νκΈ° μν΄μ
3οΈβ£Β λ©λͺ¨λ¦¬μμ μ½μ΄ λ€μΈ "2μ§μλ₯Ό μ΄λ»κ² ν΄μ"ν μ§ κ²°μ νκΈ° μν΄μ
μλ°μ€ν¬λ¦½νΈ μμ§μ datatypeμ λ°λΌ μ ν΄μ§ ν¬κΈ°μ λ©λͺ¨λ¦¬ 곡κ°μ ν보νλ€.
λ°λΌμ, λ³μμ ν λΉλλ κ°μ datatypeμ λ°λΌ ν보ν΄μΌ ν λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°κ° κ²°μ λλ€.
"λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°" = λ©λͺ¨λ¦¬ μ
μ κ°μ(byte μ)
β
6.4 λμ νμ΄ν
λμ νμ
μΈμ΄
Copy μλ°μ€ν¬λ¦½νΈμ λ³μλ μ μΈμ΄ μλ **ν λΉμ μν΄ νμ
μ΄ κ²°μ (νμ
μΆλ‘ . type inference)**λλ€. κ·Έλ¦¬κ³ **μ¬ν λΉ**μ μν΄ λ³μμ νμ
μ μΈμ λ μ§ λμ μΌλ‘ λ³ν μ μλ€(**λμ νμ΄ν dynamic typing)**.
νμ¬ λ³μμ ν λΉλμ΄ μλ κ°μ μν΄ λ³μμ νμ
μ΄ λμ μΌλ‘ κ²°μ λλ€.
var, const, let ν€μλλ₯Ό μ¬μ©ν΄μ λ³μλ₯Ό μ μΈνλ κ²μΌ λΏ, μ€μ§μ μΈ κ°μ νμ
μ λ°νμ(runtime)μ ν λΉλλ κ°
μ μν΄ κ²°μ λλ€.
λ°λ©΄μ, μ μ νμ
μΈμ΄(C, Java λ±)λ λ³μ μ μΈ μμ
μ νμ
μ΄ κ²°μ λκ³ λ³μμ νμ
μ λ³κ²½ν μ μλ€ . κ·Έλ¦¬κ³ μ»΄νμΌ μμ μ νμ
체ν¬
(μ μΈν λ°μ΄ν° νμ
μ λ§λ κ°μ ν λΉνλμ§ κ²μ¬νλ μ²λ¦¬)λ₯Ό μννλ€.
Copy var foo;
console.log(typeof foo); // undefined
foo = 3;
console.log(typeof foo); // numbaer
λμ νμ
μΈμ΄μ λ¨μ
Copy λμ νμ
μΈμ΄λ μ μ°μ±(flexibility) μ λμ§λ§ μ λ’°μ±(reliability) μ λ¨μ΄μ§λ€.
볡μ‘ν νλ‘κ·Έλ¨μμλ λ³ννλ λ³μ κ°μ μΆμ νκΈ° μ΄λ €μΈ μ μλ€.
κ°μ λ³κ²½μ μν΄ νμ
λ μΈμ λ μ§ λ³κ²½λ μ μλ€. β κ°μ νμΈνκΈ° μ μλ νμ
μ νμ ν μ μλ€.
κ°λ°μμ μλμλ μκ΄μμ΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ νμ
μ΄ μλμΌλ‘ λ³νλκΈ°λ νλ€.
Copy π‘λ³μλ₯Ό μ¬μ©ν λ μ£Όμν μ¬ν
1οΈβ£. λ³μλΒ κΌ νμν κ²½μ°μ νν΄ μ νμ μΌλ‘ μ¬μ©ν κ².
2οΈβ£. λ³μμ μ ν¨λ²μ(μ€μ½ν, scope)λ μ΅λν μ’κ² λ§λ€μ΄ λ³μμ λΆμμ©μ μ΅μ ν κ².
3οΈβ£. μ μ λ³μλ μ΅λν μ¬μ©μ νΌν κ².
β μ μ λ³μλ νλ‘κ·Έλ¨μ 볡μ‘μ±μ μ¦κ°μν€κ³ , μ²λ¦¬ νλ¦μ μΆμ νκΈ° μ΄λ ΅κ² λ§λ€κ³ , μ€λ₯κ° λ°μν κ²½μ° μμΈμ νΉμ νκΈ° μ΄λ ΅κ² λ§λ€κΈ° λλ¬Έ
4οΈβ£. λ³μλ³΄λ€ μμλ₯Ό μ¬μ©ν΄ κ°μ λ³κ²½μ μ΅μ ν κ².
5οΈβ£. λ³μ μ΄λ¦μ λ³μμ λͺ©μ μ΄λ μλ―Έλ₯Ό νμ
ν μ μλλ‘ λ€μ΄λ°ν κ².
β μλκ° λͺ
νν λ€μ΄λ°μ μ½λλ₯Ό μ΄ν΄νκΈ° μ½κ² λ§λ€κ³ , μ΄λ νμ
κ³Ό μμ°μ± ν₯μμ λμμ μ€λ€.