π Chapter 1: λ°μ΄ν° νμ
π λ°μ΄ν° νμ μ μ’ λ₯β
- κΈ°λ³Έν(μμν)
- μ«μ, λ¬Έμμ΄, λΆλ¦¬μΈ(
boolean
),null
,undefined
,Symbol
(ES6)
- μ«μ, λ¬Έμμ΄, λΆλ¦¬μΈ(
- μ°Έμ‘°ν
- κ°μ²΄, λ°°μ΄, ν¨μ, λ μ§, μ κ·ννμ
- ES6: Map, WeakMap, Set, WeakSet
- κΈ°λ³Ένκ³Ό μ°Έμ‘°νμ ꡬλΆνλ κΈ°μ€μ κΈ°λ³Ένμ κ°μ΄ λ΄κΈ΄ μ£Όμκ°μ λ°λ‘ 볡μ νλ λ°λ©΄ μ°Έμ‘°νμ κ°μ΄ λ΄κΈ΄ μ£Όμκ°λ€λ‘ μ΄λ£¨μ΄μ§ λ¬Άμμ κ°λ¦¬ν€λ μ£Όμκ°μ 볡μ νλ€.
π λ°μ΄ν° νμ μ κ΄ν λ°°κ²½μ§μβ
π λ©λͺ¨λ¦¬μ λ°μ΄ν°β
- κ° λΉνΈλ κ³ μ ν μλ³μλ₯Ό μ§λλ€. λ°μ΄νΈ μμ μμνλ λΉνΈμ μλ³μλ‘ μμΉλ₯Ό νμ νλ€.
- λͺ¨λ λ°μ΄ν°λ λ°μ΄νΈ λ¨μμ μλ³μ, λ μ ννκ²λ λ©λͺ¨λ¦¬ μ£Όμκ°μ ν΅ν΄ μλ‘ κ΅¬λΆνκ³ μ°κ²°ν μ μλ€.
π μλ³μμ λ³μβ
- λ³μλ λ³ν μ μλ μλ‘ κ°μ΄ λ°λμ μ«μμ¬μΌ νλ κ²μ μλλ€. μ¦, λ³ν μ μλ 무μΈκ°λΌλ λ»μΌλ‘, μ¬κΈ°μ 무μΈκ°λ λ°μ΄ν°λ₯Ό λ§νλ€. μ«μ, λ¬Έμμ΄, κ°μ²΄, λ°°μ΄ λ±λ±.
- μλ³μλ μ΄λ€ λ°μ΄ν°λ₯Ό μλ³νλ λ° μ¬μ©νλ μ΄λ¦, μ¦ λ³μλͺ μ΄λ€.
π λ³μ μ μΈκ³Ό λ°μ΄ν° ν λΉβ
π λ³μ μ μΈβ
var a;
- μ μλ *λ³ν μ μλ λ°μ΄ν°λ₯Ό λ§λ λ€. μ΄ λ°μ΄ν°λ μλ³μλ
a
λ‘ νλ€.*λΌκ³ λ§ν μ μλ€. - λ³μλ κ²°κ΅ λ³κ²½ κ°λ₯ν λ°μ΄ν°κ° λ΄κΈΈ μ μλ κ³΅κ° λλ κ·Έλ¦μ΄λΌκ³ ν μ μλ€.
- μμ μ λͺ
λ Ήμ λ°μ μ»΄ν¨ν°λ λ©λͺ¨λ¦¬μμ λΉμ΄μλ κ³΅κ° νλλ₯Ό ν보νλ€. κ·Έ 곡κ°μ μμλ‘ 1003λ²μΌλ‘ μ νλ€. μ΄ κ³΅κ°μ μ΄λ¦(μλ³μ)μ
a
λΌκ³ μ§μ νλ€. (λ³μ μ μΈ κ³Όμ ) - μ΄ν μ¬μ©μκ°
a
μ μ κ·Όνκ³ μ νλ©΄ μ»΄ν¨ν°λ λ©λͺ¨λ¦¬μμa
λΌλ μ΄λ¦μ κ°μ§ μ£Όμλ₯Ό κ²μν΄ ν΄λΉ 곡κ°μ λ΄κΈ΄ λ°μ΄ν°λ₯Ό λ°ννλ€.
π λ°μ΄ν° ν λΉβ
- λ³μ μ μΈκ³Ό ν λΉ
var a; // λ³μa μ μΈ
a = 'abc'; // λ³μ aμ λ°μ΄ν° ν λΉ
var a = 'abc'; // μ μΈκ³Ό ν λΉμ ν λ¬ΈμμΌλ‘ νν
- μλ°μ€ν¬λ¦½νΈμμ ν λΉμ μ€μ λ‘λ ν΄λΉ μμΉμ λ¬Έμμ΄
abc
λ₯Ό μ§μ μ μ₯νμ§ μλλ€. - λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν λ³λμ λ©λͺ¨λ¦¬ 곡κ°μ λ€μ ν보ν΄μ
abc
λ₯Ό μ μ₯νκ³ , κ·Έ μ£Όμλ₯Ό λ³μ μμμ μ μ₯νλ μμΌλ‘ μ΄λ€μ§λ€.
- λ³μ μμμμ λΉ κ³΅κ°(1003)μ ν보νλ€.
- ν보ν 곡κ°μ μλ³μλ₯Ό aλ‘ μ§μ νλ€.
- λ°μ΄ν° μμμ λΉ κ³΅κ°(5004)μ λ¬Έμμ΄ abcλ₯Ό μ μ₯νλ€.
- λ³μ μμμμ aλΌλ μλ³μλ₯Ό κ²μνλ€.(1003)
- μμ μ μ₯ν λ¬Έμμ΄μ μ£Όμ(5004)λ₯Ό 1003μ 곡κ°μ λμ νλ€.
πΆ λ³μ μμμ κ°μ μ§μ λμ νμ§ μκ³ κ΅³μ΄ λ²κ±°λ‘κ² ν λ¨κ³λ₯Ό κ±°μΉλ μ΄μ β
- λ°μ΄ν° λ³νμ μμ λ‘κ² ν μ μκ² ν¨κ³Ό λμμ λ©λͺ¨λ¦¬λ₯Ό λμ± ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκΈ° μν κ³ λ―Όμ κ²°κ³Όμ΄λ€.
- λ§μ½ 미리 ν보ν κ³΅κ° λ΄μμλ§ λ°μ΄ν° λ³νμ ν μ μλ€λ©΄ λ³νν λ°μ΄ν°λ₯Ό λ€μ μ μ₯νκΈ° μν΄μλ ν보λ 곡κ°μ λ³νλ λ°μ΄ν° ν¬κΈ°μ λ§κ² λ리λ μμ μ΄ μ νλμ΄μΌ νλ€.
- ν¨μ¨μ μΌλ‘ λ¬Έμμ΄ λ°μ΄ν°μ λ³νμ μ²λ¦¬νλ €λ©΄ λ³μμ λ°μ΄ν°λ₯Ό λ³λμ 곡κ°μ λλμ΄ μ μ₯νλ κ²μ΄ μ΅μ μ΄λ€.
- λ¬Έμμ΄
abc
μ λ§μ§λ§μdef
λ₯Ό μΆκ°νλΌκ³ νλ©΄ μ»΄ν¨ν°λ μμabc
κ° μ μ₯λ 곡κ°μabcdef
λ₯Ό ν λΉνλ λμabcdef
λΌλ λ¬Έμμ΄μ μλ‘ λ§λ€μ΄ λ³λμ 곡κ°μ μ μ₯νκ³ κ·Έ μ£Όμλ₯Ό λ³μ 곡κ°μ μ°κ²°νλ€. μ΄λ€ λ³νμ κ°νλ μκ΄ μμ΄ λ¬΄μ‘°κ±΄ μλ‘ λ§λ€μ΄ λ³λμ 곡κ°μ μ μ₯νλ€. - κΈ°μ‘΄ λ°μ΄ν°λ μμ μ μ£Όμλ₯Ό μ μ₯νλ λ³μκ° νλλ μκ² λλ©΄ κ°λΉμ§ 컬λ ν°(GC)μ μκ±° λμμ΄ λλ€.
- λν, μλ₯Ό λ€μ΄ 500κ°μ λ³μλ₯Ό μμ±ν΄μ λͺ¨λ λ³μμ μ«μ 5λ₯Ό ν λΉνλ μν©μ΄λΌλ©΄ μ΄ κ²½μ°λ 5λ₯Ό λ³λμ 곡κ°μ ν λ²λ§ μ μ₯νκ³ ν΄λΉ μ£Όμλ§ μ λ ₯ν΄μ€λ€. κ·Έλ κΈ° λλ¬Έμ μ€λ³΅λ λ°μ΄ν°μ λν μ²λ¦¬ ν¨μ¨μ΄ λμμ§κ² λλ κ²μ΄λ€.
π κΈ°λ³Έν λ°μ΄ν°μ μ°Έμ‘°ν λ°μ΄ν°β
π λΆλ³κ°β
- λ³μμ μμλ₯Ό ꡬλΆνλ μ±μ§μ λ³κ²½ κ°λ₯μ±μ΄λ€.
- λ³μμ μμλ₯Ό κ΅¬λΆ μ§λ λ³κ²½ κ°λ₯μ±μ λμμ λ³μ μμ λ©λͺ¨λ¦¬μ΄λ€. μ¦, ν λ² λ°μ΄ν° ν λΉμ΄ μ΄λ€μ§ λ³μ 곡κ°μ λ€λ₯Έ λ°μ΄ν°λ₯Ό μ¬ν λΉν μ μλμ§ μ¬λΆκ° κ΄κ±΄μ΄ λλ€.
- λ°λ©΄ λΆλ³μ± μ¬λΆλ₯Ό ꡬλΆν λμ λ³κ²½ κ°λ₯μ±μ λμμ λ°μ΄ν° μμ λ©λͺ¨λ¦¬μ΄λ€.
- κΈ°λ³Έν λ°μ΄ν°λ λͺ¨λ λΆλ³κ°μ΄λ€.
var a = 'abc';
a = a + 'def';
var b = 5;
var c = 5;
b = 7;
- λ³μ aμ λ¬Έμμ΄
abc
λ₯Ό ν λΉνλ€κ°def
λ₯Ό μΆκ°νλ©΄ κΈ°μ‘΄μabc
κ°abcdef
λ‘ λ°λλ κ²μ΄ μλλΌ μλ‘μ΄ λ¬Έμμ΄abcdef
λ₯Ό λ§λ€μ΄ κ·Έ μ£Όμλ₯Ό λ³μa
μ μ μ₯νλ€. μ¦,abc
μabcdef
λ μμ ν λ³κ°μ λ°μ΄ν°μ΄λ€. - λ³μ bμ μ«μ 5λ₯Ό ν λΉνλλ° μ»΄ν¨ν°λ λ°μ΄ν° μμμμ 5λ₯Ό μ°Ύκ³ μμΌλ λ°μ΄ν° 곡κ°μ νλ λ§λ€μ΄ μ μ₯ν λ€ κ·Έ μ£Όμλ₯Ό bμ μ μ₯νλ€. λ³μ cλ λ³μ bμ κ°μ μμΈ 5λ₯Ό ν λΉνλ €κ³ νλ€. μ»΄ν¨ν°λ λ°μ΄ν° μμμμ 5λ₯Ό μ°Ύκ³ μ΄λ―Έ 5κ° μ‘΄μ¬νλ κ·Έ μ£Όμλ₯Ό μ¬νμ©νλ€.
- λ³μ bλ₯Ό 7λ‘ λ°κΎΈκ³ μ νλ€. κ·Έλ¬λ©΄ κΈ°μ‘΄μ μ μ₯νλ 7μ μ°Ύμμ μμΌλ©΄ μ¬νμ©νκ³ , μμΌλ©΄ μλ‘ λ§λ€μ΄ bμ μ μ₯νλ€.
- κ²°κ΅ 5μ 7 λͺ¨λ λ€λ₯Έ κ°μΌλ‘ λ³κ²½ν μ μλ€.
- μ΄μ²λΌ λ¬Έμμ΄ κ°λ ν λ² λ§λ κ°μ λ°κΏ μ μκ³ , μ«μ κ°λ λ€λ₯Έ κ°μΌλ‘ λ³κ²½ν μ μλ€. ν λ² λ§λ€μ΄μ§ κ°μ κ°λΉμ§ 컬λ ν μ λΉνμ§ μλ ν μμν λ³νμ§ μλλ€.
π κ°λ³κ°β
- μ°Έμ‘°ν λ°μ΄ν°μ ν λΉ
var obj1 = {
a: 1,
b: 'bbb',
};
- λ€μμ μ°Έμ‘°ν λ°μ΄ν°λ₯Ό λ³μμ ν λΉνλ κ³Όμ μ΄λ€.
- μ»΄ν¨ν°λ μ°μ λ³μ μμμ λΉ κ³΅κ°(1002)μ ν보νκ³ , κ·Έ μ£Όμμ μ΄λ¦μ
obj1
λ‘ μ§μ νλ€.- μμμ λ°μ΄ν° μ μ₯ 곡κ°(5001)μ λ°μ΄ν°λ₯Ό μ μ₯νλ €κ³ λ³΄λ μ¬λ¬ κ°μ νλ‘νΌν°λ‘ μ΄λ€μ§ λ°μ΄ν° κ·Έλ£Ήμ΄λ€. μ΄ κ·Έλ£Ή λ΄λΆμ νλ‘νΌν°λ€μ μ μ₯νκΈ° μν΄ λ³λμ λ³μ μμμ λ§λ ¨νκ³ κ·Έ μμμ μ£Όμ(7103 ~ ?)λ₯Ό 5001μ μ μ₯νλ€.
- 7103 λ° 7104μ κ°κ° aμ bλΌλ νλ‘νΌν° μ΄λ¦μ μ§μ νλ€.
- λ°μ΄ν° μμμμ μ«μ 1μ κ²μνκ³ κ²μ κ²°κ³Όκ° μμΌλ―λ‘ μμλ‘ 5003μ μ μ₯νκ³ , μ΄ μ£Όμλ₯Ό 7103μ μ μ₯νλ€. λ¬Έμμ΄
bbb
μμ 5004μ μ μ₯νκ³ μ΄ μ£Όμλ₯Ό 7104μ μ μ₯νλ€.
- κΈ°λ³Έν λ°μ΄ν°μμ μ°¨μ΄λ κ°μ²΄μ λ³μ μμμ΄ λ³λλ‘ μ‘΄μ¬νλ€λ μ μ΄λ€. κ°μ²΄κ° λ³λλ‘ ν μ ν μμμ λ³μ μμμΌ λΏ λ°μ΄ν° μμμ κΈ°μ‘΄μ λ©λͺ¨λ¦¬ 곡κ°μ κ·Έλλ‘ νμ©νκ³ μλ€. λ°μ΄ν° μμμ λΆλ³κ°μ΄μ§λ§ λ³μμλ λ€λ₯Έ κ°μ΄ μΌλ§λ μ§ λμ ν μ μλ€. κ·Έλ κΈ° λλ¬Έμ μ°Έμ‘°ν λ°μ΄ν°λ λΆλ³ νμ§ μλ€λΌλ κ²μ΄λ€.
// μ°Έμ‘°ν λ°μ΄ν°μ νλ‘νΌν° μ¬ν λΉ
var obj1 = {
a: 1,
b: 'bbb',
};
obj1.a = 2;
obj1
μa
νλ‘νΌν°μ μ«μ 2λ₯Ό ν λΉνλ €κ³ νλ€. λ°μ΄ν° μμμμ μ«μ 2λ₯Ό κ²μνλ€. κ²μ κ²°κ³Όκ° μμΌλ―λ‘ λΉ κ³΅κ°μΈ 5005μ μ μ₯νκ³ μ΄ μ£Όμλ₯Ό 7103μ μ μ₯νλ€. κ·Έλ κΈ° λλ¬Έμ λ³μobj1
μ΄ λ°λΌλ³΄κ³ μλ μ£Όμλ 5001λ‘ κ·Έλλ‘μ΄λ€. μ¦, μλ‘μ΄ κ°μ²΄κ° λ§λ€μ΄μ§ κ²μ΄ μλλΌ κΈ°μ‘΄μ κ°μ²΄ λ΄λΆμ κ°λ§ λ°λ κ²μ΄λ€.
π λ³μ λ³΅μ¬ λΉκ΅β
- κΈ°λ³Έν λ°μ΄ν°μ μ°Έμ‘°ν λ°μ΄ν°μ μ°¨μ΄
- λ³μ 볡μ¬
var a = 10;
var b = a;
var obj1 = {
c: 10,
d: 'ddd',
};
var obj2 = obj1;
- λ³μλ₯Ό 볡μ¬νλ κ³Όμ μ κΈ°λ³Έν λ°μ΄ν°μ μ°Έμ‘°ν λ°μ΄ν° λͺ¨λ κ°μ μ£Όμλ₯Ό λ°λΌλ³΄κ² λλ μ μμ λμΌνλ€.
- λ³΅μ¬ κ³Όμ μ λμΌνμ§λ§ λ°μ΄ν° ν λΉ κ³Όμ μμ μ΄λ―Έ μ°¨μ΄κ° μκΈ° λλ¬Έμ λ³μ λ³΅μ¬ μ΄νμ λμμλ ν° μ°¨μ΄κ° λ°μνλ€.
var a = 10;
var b = a;
var obj1 = {
c: 10,
d: 'ddd',
};
var obj2 = obj1;
b = 15;
obj2.c = 20;
- κΈ°λ³Έν λ°μ΄ν°λ₯Ό 볡μ¬ν ν λ³μ
b
μ κ°μ λ°κΏ¨λλ κ°μ΄ λ¬λΌμ§λ λ°λ©΄, μ°Έμ‘°ν λ°μ΄ν°λ₯Ό 볡μ¬ν λ³μobj2
μ νλ‘νΌν°μ κ°μ λ°κΎΈμλλ κ°μ λ¬λΌμ§μ§ μμλ€. - μ¦, λ³μ
a
μb
λ μλ‘ λ€λ₯Έ μ£Όμλ₯Ό λ°λΌλ³΄κ² λμΌλ, λ³μobj1
κ³Όobj2
λ μ¬μ ν κ°μ κ°μ²΄λ₯Ό λ°λΌλ³΄κ³ μλ μνμ΄λ€. μ΄λ₯Ό μ½λλ‘ νννλ©΄ λ€μκ³Ό κ°λ€.
a !== b;
obj === obj2;
- μλ°μ€ν¬λ¦½νΈλ μ¬μ€ μ΄λ€ λ°μ΄ν° νμ μ΄λ λ³μμ ν λΉνκΈ° μν΄μλ μ£Όμκ°μ 볡μ¬ν΄μΌ νκΈ° λλ¬Έμ, μλ°ν λ°μ§λ©΄ λͺ¨λ λ°μ΄ν° νμ μ μ°Έμ‘°ν λ°μ΄ν°μΌ μλ°μ μλ€.
- λ€λ§ κΈ°λ³Ένμ μ£Όμκ°μ 볡μ¬νλ κ³Όμ μ΄ ν λ²λ§ μ΄λ€μ§κ³ , μ°Έμ‘°νμ ν λ¨κ³λ₯Ό λ κ±°μΉκ² λλ€λ μ°¨μ΄κ° μλ€λ κ²μ΄λ€.
// κ°μ²΄ μ체λ₯Ό λ³κ²½νμ λ
var a = 10;
var b = a;
var obj1 = {
c: 10,
d: 'ddd',
};
var obj2 = obj1;
b = 15;
obj2 = {
c: 20,
d: 'ddd'
};
- μ΄λ²μλ μλ‘μ΄ κ°μ²΄λ₯Ό ν λΉν¨μΌλ‘μ¨ κ°μ μ§μ λ³κ²½νλ€. κ·Έλ¬λ©΄ λ©λͺ¨λ¦¬μ λ°μ΄ν° μμμ μλ‘μ΄ κ³΅κ°μ μ κ°μ²΄κ° μ μ₯λκ³ κ·Έ μ£Όμλ₯Ό λ³μ μμμ
obj2
μμΉμ μ μ₯ν κ²μ΄λ€. - μ¦, μ°Έμ‘°ν λ°μ΄ν°κ° κ°λ³κ°μ΄λΌκ³ μ€λͺ ν λμ κ°λ³μ μ°Έμ‘°ν λ°μ΄ν° μ체λ₯Ό λ³κ²½ν κ²½μ°κ° μλλΌ κ·Έ λ΄λΆμ νλ‘νΌν°λ₯Ό λ³κ²½ν λλ§ μ±λ¦½νλ€.
π λΆλ³ κ°μ²΄β
π λΆλ³ κ°μ²΄λ₯Ό λ§λλ κ°λ¨ν λ°©λ²β
- μ°Έμ‘°ν λ°μ΄ν°μ κ°λ³μ λ°μ΄ν° μμ²΄κ° μλ λ΄λΆ νλ‘νΌν°λ₯Ό λ³κ²½ν λλ§ μ±λ¦½νλ€. λ°μ΄ν° μ체λ₯Ό λ³κ²½νκ³ μ νλ©΄ κΈ°λ³Έ λ°μ΄ν°μ λ§μ°¬κ°μ§λ‘ κΈ°μ‘΄ λ°μ΄ν°λ λ³νμ§ μλλ€.
- κ·Έλ λ€λ©΄ λ΄λΆ νλ‘νΌν°λ₯Ό λ³κ²½ν νμκ° μμ λλ§λ€ λ§€λ² μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€μ΄ μ¬ν λΉνκΈ°λ‘ κ·μΉμ μ νκ±°λ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λλ λꡬ(immer.js, spread operator, Object.assign)λ₯Ό νμ©νλ€λ©΄ κ°μ²΄ μμ λΆλ³μ±μ ν보ν μ μλ€.
- κ°μΌλ‘ μ λ¬λ°μ κ°μ²΄μκ² λ³κ²½μ κ°νλλΌλ μλ³Έ κ°μ²΄κ° λ³νμ§ μμμΌ νλ κ²½μ°μ λΆλ³ κ°μ²΄κ° νμνλ€.
var user = {
name: 'Seungmin',
gender: 'male',
};
var changeName = function (user, newName) {
return {
name: newName,
gender: user.gender,
};
};
var uses2 = changeName(user, 'Jung');
if (user !== user2) {
console.log('μ μ μ 보 λ³κ²½'); // μ μ μ 보 λ³κ²½
}
console.log(user.name, user2.name); // Seungmin Jung
console.log(user === user2); // false
changeName
ν¨μκ° μλ‘μ΄ κ°μ²΄λ₯Ό λ°ννλ€. κ·Έλ κΈ° λλ¬Έμuser
μuser2
λ μλ‘ λ€λ₯Έ κ°μ²΄μ΄λ―λ‘ μμ νκ² λΉκ΅ν μ μλ€.- νμ§λ§ νμ¬
gender
νλ‘νΌν°λ₯Ό νλμ½λ©μΌλ‘ μ λ ₯νλ€. λμ κ°μ²΄μ νλ‘νΌν° κ°μμ μκ΄ μμ΄ λͺ¨λ νλ‘νΌν°λ₯Ό 볡μ¬νλ ν¨μλ₯Ό λ§λ€ μ μλ€.
var copyObject = function (target) {
var result = {};
for(var prop in target) {
result[prop] = target[prop];
}
return result;
};
copyObject
ν¨μλ₯Ό μ¬μ©νκΈ°λ‘ ν©μνκ³ κ·Έ κ·μΉμ μ§ν¨λ€λ μ μ νμμλuser
κ° μ²΄κ° κ³§ λΆλ³ κ°μ²΄λΌκ³ λΆ μ μλ€. νμ§λ§ λͺ¨λκ° κ·Έ κ·μΉμ μ§ν€λ¦¬λΌλ 보μ₯μ μλ€.- λν,
copyObject
λ μμ 볡μ¬λ₯Ό μννκ³ μλ€. - μ΄λ° λ§₯λ½μμ
immutable.js
,immer.js
λ±μ λΌμ΄λΈλ¬λ¦¬κ° μΈκΈ°λ₯Ό λκ³ μλ€.
π μμ 볡μ¬μ κΉμ 볡μ¬β
- μμ 볡μ¬λ λ°λ‘ μλ λ¨κ³μ κ°λ§ 볡μ¬ν λ°©λ²μ΄κ³ , κΉμ 볡μ¬λ λ΄λΆμ λͺ¨λ κ°λ€μ νλνλ μ°Ύμμ μ λΆ λ³΅μ¬νλ λ°©λ²μ΄λ€.
- μ΄ λ§μ μ€μ²©λ κ°μ²΄μμ μ°Έμ‘°ν λ°μ΄ν°κ° μ μ₯λ νλ‘νΌν°λ₯Ό 볡μ¬ν λ κ·Έ μ£Όμκ°λ§ 볡μ¬νλ€λ μλ―Έμ΄λ€. κ·Έλ¬λ©΄ ν΄λΉ νλ‘νΌν°μ λν΄ μλ³Έκ³Ό μ¬λ³Έμ΄ λμΌν μ°Έμ‘°ν λ°μ΄ν°μ μ£Όμλ₯Ό κ°λ¦¬ν€κ² λλ€. μ¦, μ¬λ³Έμ λ³κ²½νλ©΄ μλ³Έλ λ°λκ³ , μλ³Έμ λ³κ²½νλ©΄ μ¬λ³Έλ λ³κ²½λλ€.
var user = {
name: 'Seungmin',
urls: {
portfolio: 'https://github.com/saseungmin',
blog: 'https://haranglog.tistory.com',
},
};
var user2 = copyObject(user);
user2.name = 'Jung';
console.log(user.name === user2.name); // false
user.urls.portfolio = 'https://...';
console.log(user.urls.portfolio === user2.urls.portfolio); // true
- μ μμ μ²λΌ ν λ¨κ³ λ λ€μ΄κ°
urls
μ λ΄λΆ νλ‘νΌν°λ€μ κΈ°μ‘΄ λ°μ΄ν°λ₯Ό κ·Έλλ‘ μ°Έμ‘°νκ³ μλ€. μ΄λ° νμμ΄ λ°μνμ§ μκ² νλ €λ©΄user.urls
νλ‘νΌν°μ λν΄μλ λΆλ³ κ°μ²΄λ‘ λ§λ€ νμκ° μλ€.
var user2 = copyObject(user);
user2.urls = copyObject(user.urls);
user.urls.portfolio = 'https://...';
console.log(user.urls.portfolio === user2.urls.portfolio); // false
- μ΄λ€ κ°μ²΄λ₯Ό 볡μ¬ν λ κ°μ²΄ λ΄λΆμ λͺ¨λ κ°μ 볡μ¬ν΄μ μμ ν μλ‘μ΄ λ°μ΄ν°λ₯Ό λ§λ€κ³ μ ν λ, κ°μ²΄μ νλ‘νΌν° μ€μμ κ·Έ κ°μ΄ κΈ°λ³Έν λ°μ΄ν°μΌ κ²½μ°μλ κ·Έλλ‘ λ³΅μ¬νλ©΄ λμ§λ§ μ°Έμ‘°ν λ°μ΄ν°λ λ€μ κ·Έ λ΄λΆμ νλ‘νΌν°λ€μ 볡μ¬ν΄μΌ νλ€.
- μ΄ κ³Όμ μ μ°Έμ‘°ν λ°μ΄ν°κ° μμ λλ§λ€ μ¬κ·μ μΌλ‘ μνν΄μΌλ§ λΉλ‘μ κΉμ 볡μ¬κ° λλ€.
var copyObjectDeep = function (target) {
var result = {};
// nullμ λΆμΈ μ΄μ λ typeof λͺ
λ Ήμ΄κ° nullμ λν΄μλ objectλ₯Ό λ°ννλ€. (μλ°μ€ν¬λ¦½νΈ λ²κ·Έ)
if(typeof target === 'object' && target !== null) {
for(prop in target) {
result[prop] = copyObjectDeep(target[prop]);
}
} else {
result = target;
}
return result;
};
- κ°λ¨νκ² κΉμ 볡μ¬λ₯Ό μ²λ¦¬ν μ μλ λ€λ₯Έ λ°©λ²μ κ°μ²΄λ₯Ό JSON λ¬Έλ²μΌλ‘ ννλ λ¬Έμμ΄λ‘ μ ννλ€κ° λ€μ JSON κ°μ²΄λ‘ λ°κΎΈλ κ²μ΄λ€. λ€λ§ λ©μλ(ν¨μ)λ μ¨κ²¨μ§ νλ‘νΌν°μΈ
__proto__
λgetter/setter
λ±κ³Ό κ°μ΄ JSONμΌλ‘ λ³κ²½ν μ μλ νλ‘νΌν°λ€μ λͺ¨λ 무μνλ€.
var copyObjectViaJSON = function (target) {
return JSON.parse(JSON.stringify(target));
};
var obj = {
a: 1,
b: {
c: null,
d: [1, 2],
func1: function() {
console.log(3);
},
},
func2: function() {
console.log(4);
},
};
var obj2 = copyObjectViaJSON(obj);
obj2.a = 3;
obj2.b.c = 4;
obj.b.d[1] = 3;
console.log(obj); // { a: 1, b: { c: null, d: [1, 3], func1: f() }, func2: Ζ() }
console.log(obj2); // { a: 3, b: { c: 4, d: [1, 2] } }
π undefinedμ nullβ
- μλ°μ€ν¬λ¦½νΈμμ μμμ λνλ΄λ κ°μ΄ λ κ°μ§ μλλ° λ°λ‘
undefined
μnull
μ΄λ€. undefined
λ μ¬μ©μκ° λͺ μμ μΌλ‘ μ§μ ν μλ μμ§λ§ κ°μ΄ μ‘΄μ¬νμ§ μμ λ μλ°μ€ν¬λ¦½νΈ μμ§μ μλμΌλ‘ λΆμ¬νλ κ²½μ°λ μλ€.- μλ°μ€ν¬λ¦½νΈ μμ§μ μ¬μ©μκ° μ΄λ€ κ°μ μ§μ ν κ²μ΄λΌκ³ μ μλλ μν©μμλ μ€μ λ‘λ κ·Έλ κ² νμ§ μμμ λ
undefined
λ₯Ό λ°ννλ€. λ€μ μΈ κ²½μ°κ° μ΄μ ν΄λΉνλ€.- κ°μ λμ νμ§ μμ λ³μ, μ¦ λ°μ΄ν° μμμ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ§μ νμ§ μμ μλ³μμ μ κ·Όν λ
- κ°μ²΄ λ΄λΆμ μ‘΄μ¬νμ§ μλ νλ‘νΌν°μ μ κ·Όνλ €κ³ ν λ
return
λ¬Έμ΄ μκ±°λ νΈμΆλμ§ μλ ν¨μμ μ€ν κ²°κ³Ό
// μλμΌλ‘ undefinedλ₯Ό λΆμ¬νλ κ²½μ°
var a;
console.log(a); // undefined (1)
var obj = {
a: 1,
};
console.log(obj.b); // (2) μ‘΄μ¬νμ§ μλ νλ‘νΌν°μ μ κ·Ό
var func = function() {};
var c = func(); // (3) return λ¬Έμ΄ μκ±°λ νΈμΆλμ§ μλ ν¨μμ μ€ν κ²°κ³Ό
console.log(c); // undefined
undefined
μ λ°°μ΄
var arr1 = [];
arr1.length = 3;
console.log(arr1); // [empty x 3]
var arr2 = new Array(3);
console.log(arr2); // [empty x 3]
var arr3 = [undefined, undefined, undefined];
console.log(arr3); // [undefined, undefined, undefined]
- μ μμ μ²λΌ λΉμ΄μλ μμμ
undefined
λ₯Ό ν λΉν μμλ μΆλ ₯ κ²°κ³ΌλΆν° λ€λ₯΄λ€. - λΉμ΄μλ μμλ μνμ κ΄λ ¨λ λ§μ λ°°μ΄ λ©μλλ€μ μν λμμμ μ μΈλλ€.
- μ¬μ©μκ° μ§μ
undefined
λ₯Ό ν λΉν λ°°μ΄μ λν΄μλ μΌλ°μ μΌλ‘ μκ³ μλ λλ‘ λ°°μ΄μ λͺ¨λ μμλ₯Ό μνν΄μ κ²°κ³Όλ₯Ό μΆλ ₯νλ€. - κ·Έλ¬λ
empty
λ‘ λΉμ΄μλ μμμ λν΄μλ μ΄λ ν μ²λ¦¬λ νμ§ μκ³ κ±΄λλ΄λ€. - κ·Έλ λ€λ©΄ μ¬μ©μκ° λͺ
μμ μΌλ‘ λΆμ¬ν κ²½μ°μ λΉμ΄μλ μμμ μ κ·Όνλ € ν λ λ°νλλ λ κ²½μ°μ
undefined
μ μλ―Έλ μ μλ κ·Έ μμ²΄λ‘ κ°μ΄λ€.undefined
κ° λΉλ‘ λΉμ΄μμμ μλ―ΈνκΈ°λ νμ§λ§ νλμ κ°μΌλ‘ λμνκΈ° λλ¬Έμ μ΄λμ νλ‘νΌν°λ λ°°μ΄μ μμλ κ³ μ μ ν€κ°μ΄ μ€μ‘΄νκ² λκ³ μνμ λμμ΄ λ μ μλ€. - μ¬μ©μκ° μ무κ²λ νμ§ μμ μ±λ‘ μ κ·Όνμ λ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ νλ μ μμ΄ λ°νν΄μ£Όλ
undefined
λ ν΄λΉ νλ‘νΌν° λ΄μ§ λ°°μ΄μ ν€κ° μμ²΄κ° μ‘΄μ¬νμ§ μμμ μλ―Ένλ€. - κ°μ μλ―Έλ₯Ό κ°μ§
null
μ΄λΌλ κ°μ΄ λ³λλ‘ μ‘΄μ¬νκΈ° λλ¬Έμ μ¬μ©μκ° μ§μ undefined
λ₯Ό μ¨μΌ ν μ΄μ κ° μλ€. μ¦, λΉμ΄μμμ λͺ μμ μΌλ‘ λνλ΄κ³ μΆμ λλundefined
κ° μλnull
λ₯Ό μ°λ©΄ λλ€. - μΆκ°λ‘
null
μ μ£Όμν μ μ΄ μλλ°typeof null
μ΄object
λΌλ μ μ΄λ€. μ΄λ μλ°μ€ν¬λ¦½νΈ μ체 λ²κ·Έμ΄λ€. λ°λΌμ μ΄λ€ λ³μμ κ°μ΄null
μΈμ§ μ¬λΆλ₯Ό νλ³νκΈ° μν΄μλtypeof
λ₯Ό μ¬μ©νλ©΄ μλλ€.
// undefinedμ null λΉκ΅
var n = null;
console.log(typeof n); // object
console.log(n == undefined); // true
console.log(n == null); // true
console.log(n === undefined); // false
console.log(n === null); // true
- λλ± μ°μ°μλ‘ λΉκ΅₯ν κ²½μ°
null
κ³Όundefined
κ° μλ‘ κ°λ€κ³ νλ¨νλ€. λ°λΌμ μ΄λ€ λ³μκ° μ€μ λ‘null
μΈμ§ μλλ©΄undefined
μΈμ§λ λλ± μ°μ°μλ‘ λΉκ΅ν΄μλ μ μ μλ€. λλ¬Έμ μΌμΉ μ°μ°μλ₯Ό μ¬μ©ν΄μΌμ§ μ νν λΉκ΅ν μ μλ€.
π μ 리β
- μλ°μ€ν¬λ¦½νΈ λ°μ΄ν° νμ μλ ν¬κ² κΈ°λ³Ένκ³Ό μ°Έμ‘°νμ΄ μλ€. κΈ°λ³Έμ μΌλ‘ κΈ°λ³Ένμ λΆλ³κ°μ΄κ³ μ°Έμ‘°νμ κ°λ³κ°μ΄λ€.
- λ³μλ λ³κ²½ κ°λ₯ν λ°μ΄ν°κ° λ΄κΈΈ μ μλ 곡κ°μ΄κ³ , μλ³μλ κ·Έ λ³μμ μ΄λ¦μ λ§νλ€.
- λ³μλ₯Ό μ μΈνλ©΄ μ»΄ν¨ν°λ μ°μ λ©λͺ¨λ¦¬μ λΉ κ³΅κ°μ μλ³μλ₯Ό μ μ₯νκ³ , κ·Έ 곡κ°μ κ°μ
undefined
λ‘ ν λΉνλ€. μ΄ν κ·Έ λ³μμ κΈ°λ³Έν λ°μ΄ν°λ₯Ό ν λΉνλ €κ³ νλ©΄ λ³λμ 곡κ°μ λ°μ΄ν°λ₯Ό μ μ₯νκ³ , κ·Έ 곡κ°μ μ£Όμλ₯Ό λ³μμ κ° μμμ ν λΉνλ€. - μ°Έμ‘°ν λ°μ΄ν°λ₯Ό ν λΉνκ³ μ ν κ²½μ° μ»΄ν¨ν°λ μ°Έμ‘°ν λ°μ΄ν° λ΄λΆ νλ‘νΌν°λ€μ μν λ³μ μμμ λ³λλ‘ ν보ν΄μ ν보λ μ£Όμλ₯Ό λ³μμ μ°κ²°νκ³ , λ€μ μμ ν보ν λ³μ μμμ κ° νλ‘νΌν°μ μλ³μλ₯Ό μ μ₯νκ³ , κ° λ°μ΄ν°λ₯Ό λ³λμ 곡κ°μ μ μ₯ν΄μ κ·Έ μ£Όμλ₯Ό μλ³μλ€κ³Ό 맀μΉμν¨λ€.
- μ΄μ²λΌ ν λΉ κ³Όμ μ΄ μ°¨μ΄κ° μκΈ°λ μ΄μ λ μ°Έμ‘°ν λ°μ΄ν°κ° μ¬λ¬ κ°μ νλ‘νΌν°(λ³μ)λ₯Ό λͺ¨μ κ·Έλ£Ήμ΄κΈ° λλ¬Έμ΄λ€. κ·Έλ¦¬κ³ μ΄ μ°¨μ΄λ‘ μΈν΄ μ°Έμ‘°ν λ°μ΄ν°λ₯Ό κ°λ³κ°μΌλ‘ μ¬κ²¨μΌλ§ νλ μν©μ΄ λ°μνλ€.
- μμμ λνλ΄λ κ°μ λ κ°μ§κ° μλλ°,
undefined
λ μ΄λ€ λ³μμ κ°μ΄ μ‘΄μ¬νμ§ μμ κ²½μ°λ₯Ό μλ―Ένκ³null
μ μ¬μ©μκ° λͺ μμ μΌλ‘ μμμ νννκΈ° μν΄ λμ ν κ°μ΄λ€. κ·Έλ κΈ° λλ¬Έμ λ³Έλμ μλ―Έμ λ°λΌ μ¬μ©μκ° μμμ νννκΈ° μν΄ λͺ μμ μΌλ‘undefined
λ₯Ό λμ νλ κ²μ μ§μν΄μΌ νλ€.