μλΉμ€ν¬λ¦½νΈκ° μ 곡νλ 7κ°μ§ λ°μ΄ν° νμ (μ«μ, λ¬Έμμ΄, λΆλ¦¬μΈ, Null, undfined, μ¬λ², κ°μ²΄ νμ )μ ν¬κ² μμ νμ κ³Ό κ°μ²΄νμ μΌλ‘ ꡬλΆν μ μμ΅λλ€.
- μμ νμ μ κ°μ λ³κ²½ λΆκ°λ₯ν κ°μ λλ€. κ°μ²΄ νμ μ κ°μ λ³κ²½ κ°λ₯ν κ°μ λλ€.
- μμ κ°μ λ³μ ν λΉ μ λ³μ(ν보λ λ©λͺ¨λ¦¬ 곡κ°)μλ μ€μ κ°μ΄ μ μ₯λ©λλ€. κ°μ²΄ λ³μ ν λΉ μ λ³μ(ν보λ λ©λͺ¨λ¦¬ 곡κ°)μλ μ°Έμ‘° κ°μ΄ μ μ₯λ©λλ€.
- μμ κ° λ³μλ₯Ό λ€λ₯Έ λ³μμ ν λΉ μ κ°μ μν μ λ¬ (pass by value)λΌκ³ νκ³ , κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ³μλ₯Ό λ€λ₯Έ λ³μμ ν λΉνλ©΄ μ°Έμ‘°μ μν μ λ¬ (pass by reference)λΌκ³ ν©λλ€.
11.1 μμ κ°
11.1.1 λ³κ²½ λΆκ°λ₯ν κ°
const o = {}; // const ν€μλλ₯Ό μ¬μ©ν΄ μ μΈν λ³μλ μ¬ν λΉμ΄ κΈμ§λλ€. μμλ μ¬ν λΉμ΄ κΈμ§λ λ³μμΌ λΏμ΄λ€.
// const ν€μλλ₯Ό μ¬μ©ν΄ μ μΈν λ³μμ ν λΉν μμ κ°μ λ³κ²½ν μ μμ
// const ν€μλλ₯Ό μ¬μ©ν΄ μ μΈν λ³μμ ν λΉν κ°μ²΄λ λ³κ²½ν μ μμ
o.a = 1;
console.log(o); // {a: 1}
λΆλ³μ±μ κ°λ μμ κ°μ ν λΉν λ³μλ μ¬ν λΉ μ΄μΈμ λ³μ κ°μ λ³κ²½ν μ μλ λ°©λ²μ΄ μμ΅λλ€.
11.1.2 λ¬Έμμ΄κ³Ό λΆλ³μ±
μλ°μ€ν¬λ¦½νΈμ λ¬Έμμ΄μ μμνμ μ΄λ©°, λ³κ²½ λΆκ°λ₯ν©λλ€.
λ€λ§, λ¬Έμμ΄μ μ μ¬ λ°°μ΄ κ°μ²΄μ΄λ©΄μ μ΄ν°λ¬λΈμ΄λ―λ‘ λ°°μ΄κ³Ό μ μ¬νκ² λ¬Έμμ μ κ·Όν μ μμ΅λλ€.
var str = "string";
console.log(str[0]); // s
console.log(str.length); // 6
console.log(str.toUpperCase()); // STRING
11.1.3 κ°μ μν μ λ¬
var score = 80;
var copy = score;
console.log(score, copy);
console.log(score === copy);
score = 100;
console.log(score, copy);
console.log(score == copy);
// 80 80
// true
// 100 80
// false
score λ³μμ copy λ³μμ κ° 80μ λ€λ₯Έ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λ λ³κ°μ κ°μ λλ€ . μ¬μ€ μ격νκ² λ§νλ©΄ λ³μμ κ°μ΄ μ λ¬λλ κ² μλλΌ λ©λͺ¨λ¦¬ μ£Όμκ° μ λ¬λλ κ²μ λλ€. λ λ³μμ κ°μ μλ‘ λ€λ₯Έ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λ λ³κ°μ κ°μ΄ λμ΄ μ΄λ νμͺ½μμ μ¬ν λΉμ ν΅ν΄ κ°μ λ³κ²½νλλΌλ μλ‘ κ°μν μ μμ΅λλ€.
11.2 κ°μ²΄
11.2.1 λ³κ²½ κ°λ₯ν κ°
κ°μ²΄(μ°Έμ‘°) νμ μ κ°, μ¦ κ°μ²΄λ λ³κ²½ κ°λ₯ν κ°μ λλ€.
// ν λΉμ΄ μ΄λ€μ§λ μμ μ κ°μ²΄ 리ν°λ΄μ΄ ν΄μλκ³ , κ·Έ κ²°κ³Ό κ°μ²΄κ° μμ±λ©λλ€ .
var person = {
name: 'Lee'
}
// person λ³μμ μ μ₯λμ΄ μλ μ°Έμ‘° κ°μΌλ‘ μ€μ κ°μ²΄μ μ κ·Όν©λλ€.
console.log(person) // { name: "Lee"}
μμ κ°μ λ³κ²½ λΆκ°λ₯ν κ°μ΄λ―λ‘ μ¬ν λΉ μΈλ λ°©λ²μ΄ μμ§λ§ κ°μ²΄λ λ³κ²½ κ°λ₯ν κ°μ λλ€.
μμ 볡μ¬(shallow copy)μ κΉμ 볡μ¬(deep copy)
κ°μ²΄λ₯Ό νλ‘νΌν° κ°μΌλ‘ κ°λ κ°μ²΄μ κ²½μ° μμ 볡μ¬λ ν λ¨κ³κΉμ§ 볡μ¬, κΉμ 볡μ¬λ κ°μ²΄μ μ€μ²©λμ΄ μλ κ°μ²΄κΉμ§ λͺ¨λ 볡μ¬νλ κ²μ λ§ν©λλ€.
μμ 볡μ¬μ κΉμ 볡μ¬λ‘ μμ±λ κ°μ²΄λ μλ³Έκ³Ό λ€λ₯Έ κ°μ²΄μ΄λ―λ‘ μ°Έμ‘° κ°μ΄ λ³κ°μ κ°μ²΄μ λλ€. μ°Έκ³ λ‘ μμ κ°μ ν λΉν λ³μλ₯Ό λ€λ₯Έ λ³μμ ν λΉνλ κ²μ κΉμ 볡μ¬, κ°μ²΄λ₯Ό ν λΉν λ³μλ₯Ό λ€λ₯Έ λ³μμ ν λΉνλ κ²μ μμ 볡μ¬λΌκ³ λΆλ₯΄λ κ²½μ°λ μμ΅λλ€.
const v = 1;
// "κΉμ 볡μ¬" λΌκ³ λΆλ₯΄κΈ°λ νλ€.
const c1 = v;
console.log(c1 === v); // true
const o = { x: 1 };
const c2 = o;
console.log(c2 === o); // true
11.2.2 μ°Έμ‘°μ μν μ λ¬
var person = {
name: 'Lee'
}
// μ°Έμ‘° κ°μ λ³΅μ¬ (μμ 볡μ¬)
var copy = person
μλ³Έμ μ°Έμ‘° κ°μ΄ 볡μ¬λμ΄ μ λ¬λμμΌλ―λ‘ μ°Έμ‘°μ μν μ λ¬μ΄λΌκ³ ν©λλ€. 2κ°μ μλ³μκ° νλμ κ°μ²΄λ₯Ό 곡μ νκ³ μκΈ° λλ¬Έμ μλ³Έ λλ μ¬λ³Έ μ€ μ΄λ νμͺ½μμ κ°μ²΄λ₯Ό λ³κ²½νλ©΄ μν₯μ μ£Όκ³ λ°μ΅λλ€.
var person = {
name: "Lee",
};
// μ°Έμ‘° κ°μ λ³΅μ¬ (μμ 볡μ¬)
var copy = person;
// λμΌν κ°μ²΄λ₯Ό μ°Έμ‘°νλ€
console.log(copy === person);
// λ³κ²½
copy.name = "Kim";
person.address = "Seoul";
// copyμ personμ λμΌν κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€
// λ°λΌμ μ΄λ νμͺ½μμ κ°μ²΄λ₯Ό λ³κ²½νλ©΄ μλ‘ μν₯μ μ£Όκ³ λ°μ
console.log(person);
console.log(copy);
κ°μ μν μ λ¬, μ°Έμ‘°μ μν μ λ¬μ κ²°κ΅ μλ³μκ° κΈ°μ΅νλ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λμ΄ μλ κ°μ λ³΅μ¬ μ λ¬νλ€λ λ©΄μμ λμΌν©λλ€.
ν΄μ¦
var person = {
name: "Lee",
};
var person2 = {
name: "Lee",
};
console.log(person === person2); // false
console.log(person.name === person2.name); // true
person, person2 λ³μκ° κ°λ¦¬ν€λ κ°μ²΄λ λ΄μ©μ κ°μ§λ§ λ€λ₯Έ λ©λͺ¨λ¦¬μμ μ μ₯λ λ³κ°μ κ°μ²΄μ λλ€. λ°λΌμ false, νμ§λ§ νλ‘νΌν° κ°μ μ°Έμ‘°νλ nameμ κ°μΌλ‘ νκ°λ μ μλ ννμμ΄λ―λ‘ true μ λλ€.
Reference: λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive
'Programming > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive] 13μ₯ μ€μ½ν (0) | 2023.05.30 |
---|---|
[λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive] 12μ₯ ν¨μ (0) | 2023.05.27 |
[λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive] 10μ₯ κ°μ²΄ 리ν°λ΄ (0) | 2023.05.20 |
[λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive] 06μ₯ λ°μ΄ν° νμ (0) | 2023.05.17 |
[λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive] 05μ₯ ννμκ³Ό λ¬Έ (0) | 2023.05.17 |