π λ³Έ ν¬μ€νΈλ 'λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive' λμλ₯Ό λ°νμΌλ‘ ν΅μ¬ κ°λ λ° λ΄μ©μ μμ½ν ν¬μ€νΈμ λλ€.
07μ₯ μ°μ°μ
μ°μ°μλ νλ μ΄μμ ννμμ λμμΌλ‘ μ°μ , ν λΉ, λΉκ΅, λ Όλ¦¬, νμ , μ§μ μ°μ° λ±μ μννμ¬ νλμ κ°μ λ§λλλ€. μ΄λ μ°μ°μ λμμ νΌμ°μ°μλΌκ³ ν©λλ€. μ΄λ νΌμ°μ°μλ κ°μΌλ‘ νκ°λ μ μμ΄μΌ νλ€λ μ‘°κ±΄μ΄ μμ΄μΌ νλ©°, νΌμ°μ°μμ μ°μ°μμ μ‘°ν©μΌλ‘ λ§λ€μ΄μ§ ννμλ κ°μΌλ‘ νκ°λ μ μμ΄μΌ ν©λλ€.
νΌμ°μ°μκ° 'κ°'μ΄λΌλ λͺ μ¬μ μν μ νλ€λ©΄ μ°μ°μλ 'νΌμ°μ°μλ₯Ό μ°μ°νμ¬ μλ‘μ΄ κ°μ λ§λ λ€'λΌλ λμ¬μ μν μ μνν©λλ€.
7.1 μ°μ μ°μ°μ
μ°μ μ°μ°μλ νΌμ°μ°μλ₯Ό λμμΌλ‘ μνμ κ³μ°μ μννμ¬ μλ‘μ΄ μ«μ κ°μ λ§λλλ€. μ°μ°μ΄ λΆκ°λ₯ν κ²½μ°μλ NaN(not-a-number)λ₯Ό λ°νν©λλ€.
μ°μ μ°μ°μλ νΌμ°μ°μμ κ°μμ λ°λΌ μ΄ν μ°μ μ°μ°μμ λ¨ν μ°μ μ°μ°μλ‘ κ΅¬λΆν μ μμ΅λλ€.
7.1.1 μ΄ν μ°μ μ°μ°μ
μ°μ μ°μ°μ μ€ 2κ°μ νΌμ°μ°μλ₯Ό κ°λ κ²½μ°μ λλ€. 2κ°μ νΌμ°μ°μλ₯Ό μνμ κ³μ°(μ°μ μ°μ°)νμ¬ μλ‘μ΄ κ°μ λ§λλλ€. λͺ¨λ μ΄ν μ°μ μ°μ°μλ λΆμ ν¨κ³Όκ° μλ€λ νΉμ§μ κ°κ³ μμ΅λλ€.
λΆμ ν¨κ³Ό(side effect) : μ°μ μ°μ° μ€μ νΌμ°μ°μμ κ°μ λ³κ²½μ΄ μ΄λ£¨μ΄μ§λ κ²
μ΄ν μ°μ μ°μ°μ | μλ―Έ | λΆμν¨κ³Ό |
+ | λ§μ | x |
- | λΊμ | x |
* | κ³±μ | x |
/ | λλμ | x |
% | λλ¨Έμ§ | x |
λ°λΌμ, μ΄ν μ°μ μ°μ°μλ₯Ό ν΅ν μ΄λ€ μ°μ μ°μ°μ ν΄λ νΌμ°μ°μμ κ°μ΄ λ°λλ κ²½μ°κ° μκ³ μΈμ λ μλ‘μ΄ κ°μ λ§λλλ€.
7.1.2 λ¨ν μ°μ μ°μ°μ
μ°μ μ°μ°μ μ€ 1κ°μ νΌμ°μ°μλ₯Ό κ°λ κ²½μ°μ λλ€. 1κ°μ νΌμ°μ°μλ₯Ό μνμ κ³μ°(μ°μ μ°μ°)νμ¬ μ«μ κ°μ λ§λλλ€.
λ¨ν μ°μ μ°μ°μ | μλ―Έ | λΆμ ν¨κ³Ό |
++ | μ¦κ° | o |
-- | κ°μ | o |
+ | μ΄λ ν ν¨κ³Όλ μμ | x |
- | μμλ₯Ό μμλ‘, μμλ₯Ό μμλ‘ λ°μ νμ¬ λ°ν | x |
μ£Όμν μ μ μ¦κ° μ°μ°μ(++, --)λ νΌμ°μ°μμ κ°μ λ³κ²½νλ λΆμν¨κ³Όκ° μλ€λ κ²μ λλ€. μ¦, μ¦κ° μ°μ°μ ν κ²½μ°μλ νΌμ°μ°μμ κ°μ λ³κ²½νλ μ묡μ ν λΉμ΄ μ΄λ£¨μ΄ μ§λλ€.
var x = 0;
x++; // x = x + 1; <- μ묡μ ν λΉ
console.log(x); // 1
x--; // x = x - 1; <- μ묡μ ν λΉ
console.log(x); // 0
μ¦κ° μ°μ°μλ μμΉμ μ°¨μ΄κ° μμ΅λλ€. μ¦ x++κ³Ό ++xλ λ€λ₯΄κ² λμν¨μ μ μν΄μΌ ν©λλ€.
var x = 5, result;
// μ ν λΉ νμ¦κ°
result = x++;
console.log(result, x); // 5, 6
// μ μ¦κ° νν λΉ
result = ++x;
console.log(result, x); // 7, 7
μ νμμ +λ μλ¬΄λ° ν¨κ³Όκ° μλ€κ³ νμμ§λ§ μ«μ νμ μ΄ μλ νΌμ°μ°μμ +λ₯Ό μ¬μ©νλ©΄ μ«μ νμ μΌλ‘ λ³ννμ¬ λ°νν΄μ€λλ€(-μ κ²½μ°μλ λ§μ°¬κ°μ§).
var x = '1';
console.log(+x); // 1
console.log(x); // "1"
μ΄λ νΌμ°μ°μλ₯Ό λ³κ²½νλ κ²μ΄ μλλΌ μλ‘μ΄ κ°μ μμ±ν΄μ μ£Όλ κ²μ΄κΈ° λλ¬Έμ λΆμν¨κ³Όλ λλ€ λ°μνμ§ μμ΅λλ€.
7.1.3 λ¬Έμμ΄ μ°κ²° μ°μ°μ
μ΄μ ν¬μ€ν μμλ μ κΉ μΈκΈνλ κ²μ²λΌ + μ°μ°μμ νΌμ°μ°μ μ€ 1κ° μ΄μμ΄ λ¬Έμμ΄μΈ κ²½μ°μ +λ λ¬Έμμ΄ μ°κ²° μ°μ°μλ‘ λμν©λλ€.
'1' + 2; // '12'
1 + '2'; // '12'
μ΄λ μ£Όμν΄μΌ ν μ μ κ°λ°μμ μλμλ μκ΄ μμ΄ JSμμ§μ μνμ¬ μ묡μ μΌλ‘ νμ μ΄ λ³νλκΈ°λ νλ€λ κ²μ λλ€. 1 + trueμ κ²½μ°μλ trueλ 1λ‘ νμ λ³νμ΄ λμ΄ 2λ₯Ό λ°ννκ² λ©λλ€.
μ΄λ¬ν νμμ μ묡μ νμ λ³ν λλ νμ κ°μ λ³νμ΄λΌκ³ ν©λλ€.
7.2 ν λΉ μ°μ°μ
ν λΉ μ°μ°μλ μ°νμ μλ νΌμ°μ°μμ νκ³Ό κ²°κ³Όλ μ’νμ μλ λ³μμ ν λΉν©λλ€. ν λΉ μ°μ°μλ μ’νμ λ³μμ κ°μ ν λΉνκΈ° λλ¬Έμ λ³μ κ°μ΄ λ³νλ λΆμ ν¨κ³Ό(μ’νμ μλ νΌμ°μ°μμ κ°μ΄ λ³κ²½λ¨)κ° μμ΅λλ€.
ν λΉ μ°μ°μλ‘λ =, +=, -=, *=, /=, %= λ±μ΄ μμ΅λλ€.
λν ν λΉλ¬Έμ κ²½μ°, λ¨μν λ³μμ κ°μ ν λΉνλ λΆμ ν¨κ³Όλ§ μλ κ²μ΄ μλλΌ κ·Έ μμ²΄κ° κ°μΌλ‘ νκ°λλ ννμμΈ λ¬Έμ λλ€. λ°λΌμ a = b = c = 0κ³Ό κ°μ ννμ΄ κ°λ₯ν©λλ€.
- c = 0: 0μΌλ‘ νκ°
- b = 0: 0μΌλ‘ νκ°
- a = 0: 0μΌλ‘ νκ°
7.3 λΉκ΅ μ°μ°μ
λΉκ΅ μ°μ°μλ μ’νμ νΌμ°μ°μμ μ°νμ νΌμ°μ°μλ₯Ό λΉκ΅ν λ€μ, κ·Έ κ²°κ³Ό κ°μ λΆλ¦¬μΈ κ°μΌλ‘ λ°νν©λλ€. λΉκ΅ μ°μ°μλ μ£Όλ‘ if λ¬Έμ΄λ for λ¬Έκ³Ό κ°μ μ μ΄λ¬Έμ 쑰건μμ μ¬μ©λ©λλ€.
7.3.1 λλ± / μΌμΉ λΉκ΅ μ°μ°μ
λλ± μ°μ°μμ μΌμΉ λΉκ΅ μ°μ°μλ μ’νκ³Ό μ°νμ νΌμ°μ°μκ° κ°μ κ°μΌλ‘ νκ°λλ μ§ λΉκ΅νμ¬ λΆλ¦¬μΈ κ°μ λ°νν©λλ€. νμ§λ§ μ΄λ λΉκ΅λλ μ격μ±μ μ λμ μ°¨μ΄κ° μμ΅λλ€. λλ± λΉκ΅ μ°μ°μλ λΉκ΅μ λμ¨νκ³ μΌμΉ λΉκ΅ μ°μ°μλ λΉκ΅μ μ격ν©λλ€.
λΉκ΅ μ°μ°μ | μλ―Έ | μ€λͺ | λΆμ ν¨κ³Ό |
== | λλ± λΉκ΅ | xμ yμ κ°μ΄ κ°μ | x |
=== | μΌμΉ λΉκ΅ | xμ yμ κ°κ³Ό νμ μ΄ κ°μ | x |
!= | λΆλλ± λΉκ΅ | xμ yμ κ°μ΄ λ€λ¦ | x |
!== | λΆμΌμΉ λΉκ΅ | xμ yμ κ°κ³Ό νμ μ΄ λ€λ¦ | x |
λλ± λΉκ΅, λΆλλ± λΉκ΅μ κ²½μ°μλ μ묡μ μΌλ‘ λμ νμ μ μΌμΉμν¨ λ€μ κ°μ κ°μΈμ§ νλ¨ν©λλ€.
κ·Έλ κΈ° λλ¬Έμ 5 == '5'μ κ²½μ°, μ묡μ νμ λ³νλ₯Ό μμΌμ νμ μ μΌμΉμν€λ©΄ κ°μ κ°μ κ°κ² λ©λλ€. μ΄λ¬ν λλ± λΉκ΅ μ°μ°μλ νΈλ¦¬νκΈ΄ νμ§λ§ κ²°κ³Ό μμΈ‘μ΄ μ΄λ ΅κ³ μ€μκ° λ°μνκΈ° μ½μ΅λλ€. κ·Έλ κΈ° λλ¬Έμ μΌμΉ λΉκ΅ μ°μ°μ, λΆμΌμΉ λΉκ΅ μ°μ°μ μ¬μ©μ΄ μ§ν₯λκ³€ ν©λλ€.
μΌμΉ μ°μ°μμμ μ£Όμν΄μΌ ν κ²μΌλ‘ NaNμ΄ μμ΅λλ€.
NaNμ μκΈ° μμ κ³Ό μΌμΉνμ§ μλ μ μΌν κ°μ΄κΈ° λλ¬Έμ NaN === NaNμ falseλ₯Ό λ°νν©λλ€. λ°λΌμ κ°μ΄ NaNμΈμ§ νμΈνλ €λ©΄ λΉνΈμΈ ν¨μ Number.isNaN μ μ¬μ©ν΄μΌ ν©λλ€.
7.3.2 λμ κ΄κ³ λΉκ΅ μ°μ°μ
λμ κ΄κ³ λΉκ΅ μ°μ°μλ νΌμ°μ°μμ ν¬κΈ°λ₯Ό λΉκ΅νμ¬ λΆλ¦¬μΈ κ°μ λ°ννλ©° <, >, <=, >=κ° μμ΅λλ€.
7.4 μΌν 쑰건 μ°μ°μ
μΌν 쑰건 μ°μ°μλ 쑰건μμ νκ° κ²°κ³Όμ λ°λΌ λ°νν κ°μ κ²°μ ν©λλ€. μλ°μ€ν¬λ¦½νΈμ μ μΌν μΌν μ°μ°μμ΄λ©° λΆμ ν¨κ΄μ΄ μμ΅λλ€. μΌν 쑰건 μ°μ°μ ννμμ μλμ κ°μ΄ μμ±ν μ μμ΅λλ€.
쑰건μ ? 쑰건μμ΄ trueμΌ λ λ°νν κ° : 쑰건μμ΄ falseμΌ λ λ°νν κ°
μΌν 쑰건 μ°μ°μμ 첫 λ²μ§Έ νΌμ°μ°μλ 쑰건μμ΄κΈ° λλ¬Έμ μΌν 쑰건 μ°μ°μ ννμμ 쑰건문μΌλ‘ λ³Ό μ μμ΅λλ€. λ°λΌμ if ... else λ¬Έμ μ¬μ©νμ¬ μΌν μ°μ°μ ννμκ³Ό μ μ¬νκ² μ²λ¦¬ν μ μμ΅λλ€.
νμ§λ§ μΌν 쑰건 μ°μ°μ ννμμ κ°μ²λΌ μ¬μ©ν μ μμ§λ§ if ... else λ¬Έμ ννμμ΄ μλ λ¬Έμ΄κΈ° λλ¬Έμ κ°μ²λΌ μ¬μ©ν μ μμ΅λλ€. μ΄ μ μ μ μνμ¬ μ½λλ₯Ό μμ±νλ κ²μ΄ μ€μν©λλ€.
μΌν μ°μ°μλ 쑰건μ λ°λΌ μνν΄μΌ ν λ¬Έμ΄ νλμΈ κ²½μ°μ μ¬μ©νλ©΄ λμ κ°λ μ±μ κΈ°λν μ μμΌλ κ·Έλ μ§ μμ κ²½μ°μλ if ... else λ¬Έμ μ¬μ©νλ κ²μ΄ λ κΆμ₯λκ³ μμ΅λλ€(κ°λ μ± μΈ‘λ©΄).
7.5 λ Όλ¦¬ μ°μ°μ
λ Όλ¦¬ μ°μ°μλ μ°νκ³Ό μ’νμ νΌμ°μ°μ(λΆμ λ Όλ¦¬ μ°μ°μ !μ κ²½μ°μλ μ°νμ νΌμ°μ°μ)λ₯Ό λ Όλ¦¬ μ°μ°ν©λλ€.
λ Όλ¦¬ν©(OR)μ μλ―Ένλ ||, λ Όλ¦¬κ³±(AND)λ₯Ό μλ―Ένλ &&, λΆμ (NOT)μ μλ―Ένλ !κ° μμ΅λλ€. κ°κ°μ λͺ¨λ λΆμ ν¨κ³Όλ₯Ό κ°μ§μ§ μμ΅λλ€.
|| λλ &&μ ν΅ν νκ³Ό κ²°κ³Όλ λΆλ¦¬μΈ κ°μ΄ μλ μλ μμ΅λλ€. ν΄λΉ ννμμ μΈμ λ 2κ°μ νΌμ°μ°μ μ€ μ΄λ νμͺ½μΌλ‘ νκ°λ©λλ€.
// λ¨μΆ νκ°
'Cat' && 'Dog'; // 'Dog'
μ΄ λΆλΆμ νμ λ€λ£° 'λ¨μΆ νκ°'μ λν ν¬μ€ν λ§ν¬λ₯Ό κ±Έμ΄λλλ‘ νκ² μ΅λλ€.
7.6 μΌν μ°μ°μ
μΌν μ°μ°μλ μΌμͺ½ νΌμ°μ°μλΆν° μ°¨λ‘λλ‘ νΌμ°μ°μλ₯Ό νκ°νκ³ λ§μ§λ§ νΌμ°μ°μμ νκ°κ° λλλ©΄ λ§μ§λ§ νΌμ°μ°μμ νκ° κ²°κ³Όλ₯Ό λ°νν©λλ€.
x = 1, y = 2, z = 3; μ΄λΌλ μ½λλ₯Ό νκ°νλ©΄ 3μ λ°ννκ² λκ² μ΅λλ€.
7.7 κ·Έλ£Ή μ°μ°μ
μκ΄νΈ ()λ₯Ό μ¬μ©νμ¬ νΌμ°μ°μλ₯Ό κ°μΈλ κ·Έλ£Ή μ°μ°μλ μμ μ νΌμ°μ°μμΈ ννμμ κ°μ₯ λ¨Όμ νκ°ν μ μμ΅λλ€. μ¦, μ°μ°μμ μ°μ μμλ₯Ό λμ΄μ¬λ € μ‘°μ νκΈ° μνμ¬ μ¬μ©λ©λλ€. κ·Έλ£Ή μ°μ°μλ μ°μ°μ μ°μ μμκ° μ μΌ λλ€λ νΉμ§μ΄ μμ΅λλ€.
7.8 typeof μ°μ°μ
typeof μ°μ°μλ νΌμ°μ°μμ λ°μ΄ν° νμ μ λ¬Έμμ΄λ‘ λ°νν©λλ€. "string", "number", "boolean", "undefined", "symbol", "object", "function" μ€ νλλ₯Ό λ°νν©λλ€. "null"μ λ°ννλ κ²½μ°λ μμΌλ©° ν¨μμ κ²½μ° "function"μ λ°νν©λλ€. μ΄μ²λΌ typeof μ°μ°μκ° λ°ννλ λ¬Έμμ΄μ΄ 7κ°μ λ°μ΄ν° νμ κ³Ό μ ννκ² μΌμΉνμ§ μμ μ μμ΅λλ€.
typeof μ°μ°μλ‘ null κ°μ νκ°νλ©΄ "object"κ° λ°νλ©λλ€. μ΄λ JS 첫 λ²μ§Έ λ²μ μ μ€λ₯μΈλ° κΈ°μ‘΄ μ½λμ μν₯μ μ€ μ μκΈ° λλ¬Έμ νμ¬κΉμ§ κ³ μΉμ§ λͺ»νκ³ μμ΅λλ€.
λ°λΌμ ν΄λΉ κ°μ΄ nullμΈμ§ νλ³νκΈ° μν΄μλ μΌμΉ μ°μ°μ(===)λ₯Ό μ¬μ©νλ κ²μ΄ λ°λμ§ν©λλ€.
λν μ μΈνμ§ μμ κ°μ typeof μ°μ°μλ‘ νκ°ν κ²½μ°μλ ReferenceErrorλ₯Ό λ°μμν€λ κ²μ΄ μλ "undefined"λ₯Ό λ°νν©λλ€.\
7.9 μ§μ μ°μ°μ
ES7μμ λμ λ μ§μ μ°μ°μλ μ’νμ νΌμ°μ°μλ₯Ό 'λ°'μΌλ‘ μ°νμ νΌμ°μ°μλ₯Ό 'μ§μ'λ‘ κ±°λ μ κ³±ν μ«μ κ°μ λ°νν©λλ€.
2 ** 2; // 4
// μ§μ μ°μ°μκ° λμ
λκΈ° μ΄μ μλ Math.pow λ©μλλ₯Ό μ¬μ©νμλ€.
Math.pow(2, 2); // 4
λν, μ΄ν μ°μ°μ μ€ μ°μ μμκ° κ°μ₯ λλ€λ νΉμ§μ κ°μ§κ³ μμ΅λλ€.
7.10 κ·Έ μΈμ μ°μ°μ
μμμ λ€λ£¬ μ°μ°μ μ΄μΈμλ ?. / ?? / delete / new / instanceof / in λ±μ μ°μ°μκ° μμ΅λλ€. κ΄λ ¨ ν¬μ€νΈκ° μ¬λΌμ€λ©΄ νλ¨μ λ§ν¬λ₯Ό κ±Έμ΄λλλ‘ νκ² μ΅λλ€.
7.11 μ°μ°μμ λΆμ ν¨κ³Ό
λλΆλΆμ μ°μ°μλ λ€λ₯Έ μ½λμ μν₯μ μ£Όμ§ μμ΅λλ€. νμ§λ§ ν λΉ μ°μ°μ, μ¦κ° μ°μ°μ(++, --), delete μ°μ°μμ κ²½μ° λ€λ₯Έ μ½λμ μν₯μ μ€λλ€.
ν λΉ μ°μ°μλ λ³μμ κ°μ΄ λ³νλ λΆμ ν¨κ³Όλ₯Ό, μ¦κ° μ°μ°μλ νΌμ°μ°μμ κ°μ λ³κ²½νλ λΆμ ν¨κ³Όλ₯Ό κ°μ§κ³ μμ΅λλ€. λ§μ§λ§μΌλ‘ delete μ°μ°μλ κ°μ²΄μ νλ‘νΌν°λ₯Ό μμ νλ λΆμ ν¨κ³Όλ₯Ό κ°μ§κ³ μμ΅λλ€.
7.12 μ°μ°μ μ°μ μμ
μ°μ°μ μ°μ μμλ μ¬λ¬ κ°μ μ°μ°μλ‘ μ΄λ£¨μ΄μ§ λ¬Έμ΄ μ€νλ λ μ°μ°μκ° μ€νλλ μμλ₯Ό λ§ν©λλ€. μ°μ μμκ° λμμλ‘ λ¨Όμ μ€νλ©λλ€.
μ°μ μμ | μ°μ°μ |
1 | () |
2 | new(λ§€κ° λ³μ μ‘΄μ¬), ., [](νλ‘νΌν° μ κ·Ό), ()(ν¨μ νΈμΆ), ?.(μ΅μ λ 체μ΄λ μ°μ°μ) |
3 | new(λ§€κ° λ³μ λ―Έμ‘΄μ¬) |
4 | x++, x-- |
5 | !x, +x, -x, ++x, --x, typeof, delete |
6 | ** |
7 | *, /, % |
8 | +, - |
9 | <, <=, >, >=, in, instanceof |
10 | ==, !=, ===, !== |
11 | ?? |
12 | && |
13 | || |
14 | ? ... : ...λ° |
15 | =, +=, -=, /=, *= (ν λΉ μ°μ°μ) |
16 | , |
λͺ¨λ μ°μ°μ μ°μ μμλ₯Ό κΈ°μ΅νλ κ²λ³΄λ€ '()' κ·Έλ£Ή μ°μ°μλ₯Ό μ¬μ©νμ¬ μ°μ μμλ₯Ό μ΅μμλ‘ λμ΄μ¬λ¦΄ μ μλ€λ κ²μ κΈ°μ΅ν μ±λ‘ μ½λλ₯Ό μμ±νλ κ²μ΄ μ€μν©λλ€.
7.13 μ°μ°μ κ²°ν© μμ
μ°μ°μ κ²°ν© μμλ μ°μ°μμ μ΄λμͺ½λΆν° νκ°λ₯Ό μνν κ²μΈμ§λ₯Ό λνλ΄λ μμλ₯Ό λ§ν©λλ€.
κ²°ν© μμ | μ°μ°μ |
μ’ν -> μ°ν | +, -, /, %, <=, >=, <, >, &&, ||, ., [], (), ??, ?., in, instanceof |
μ°ν -> μ’ν | ++, --, ν λΉ μ°μ°μλ€, !x, +x, -x, ++x, --x, typeof, delete, ? ... : ..., ** |