πΏ 9.1 νμ λ³νμ΄λ?
1οΈβ£ λͺ μμ νμ λ³ν (=== νμ μΊμ€ν )
: κ°λ°μκ° μλμ μΌλ‘ κ°μ νμ μ λ³ννλ κ².
2οΈβ£ μ묡μ νμ λ³ν (=== νμ κ°μ λ³ν)
: μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ νμ μ΄ μλ λ³νλλ κ².
β νμ λ³νμ΄ μμκ°μ μ§μ λ³κ²½νλ κ²μ μλ.
=> νμ λ³νμ΄λ κΈ°μ‘΄ μμ κ°μ μ¬μ©ν΄ λ€λ₯Έ νμ μ μλ‘μ΄ μμ κ°μ μμ±νλ κ².
-> μλ‘μ΄ νμ μ κ°μ λ§λ€μ΄ λ¨ νλ² κ°μ©νκ³ λ²λ¦Ό.
μ묡μ νμ λ³νμ μ½λ μμμ λͺ λ°±ν λνλμ§ μκΈ° λλ¬Έμ,
κ°λ°μ μμ μ΄ μμ±ν μ½λμμ μ묡μ νμ λ³νμ΄ λ°μνλμ§,
λ°μνλ€λ©΄ μ΄λ€ κ°μΌλ‘ λ³νλλμ§,
κ·Έλ¦¬κ³ νμ λ³νλ κ°μΌλ‘ ννμμ΄ μ΄λ»κ² νκ°λ κ²μΈμ§ μμΈ‘ κ°λ₯ν΄μΌ νλ€.
=> νμ λ³νμ΄ μ΄λ»κ² λμνλμ§ μ νμ΄ μ΄ν΄νκ³ μ¬μ©ν΄μΌνλ€.
πΏ 9.2 μ묡μ νμ λ³ν
- κ°λ°μμ μκ΄ μλ μλ°μ€ν¬λ¦½νΈ μμ§μ κ°μ μ λ³ν
- λ¬Έμμ΄, μ«μ, λΆλ¦¬μΈ κ³Ό κ°μ μμνμ μ€ νλλ‘ μλ λ³νλ¨.
9.2.1 λ¬Έμμ΄ νμ μΌλ‘ λ³ν
1 + '2' = '12'
+ : νΌμ°μ°μ μ€ νλκ° λ¬Έμμ΄λ―λ‘ λ¬Έμμ΄ μ°κ²° μ°μ°μλ‘ λμ.
`1 + 1 = ${1 + 1}` // "1 + 1 = 2"
리ν°λ΄ ννμ μ½μ λ νκ° κ²°κ³Όλ₯Ό λ¬Έμμ΄ νμ μΌλ‘ μ묡μ νμ λ³ν.
+ '' λ₯Ό νλ©΄ λ€ λ¬Έμμ΄λ‘ λ³νλ¨.
ex)
NaN + "" => "NaN"
null + "" => "null"
({}) + "" => "[object object]"
[10, 20] + "" => "10, 20" π
9.2.2 μ«μ νμ μΌλ‘ λ³ν
μ°μ μ°μ°μμ μν : μ«μ κ°μ λ§λλ κ².
=> μ°μ μ°μ°μμ νΌμ°μ°μλ μ½λ λ¬Έλ§₯μ λͺ¨λ μ«μνμ μ΄μ¬μΌ.
μ«μνμ μΌλ‘ λ³ννμ§ λͺ»ν κ²½μ° ννμμ νκ° κ²°κ³Όλ NaN μ΄ λλ€.
> λΉκ΅ μ°μ°μλ λΉκ΅λ₯Ό ν΄μΌνκΈ° λλ¬Έμ, νΌμ°μ°μκ° μ«μμ¬μΌν¨.
=> νΌμ°μ°μ μ€ μ«μ νμ μ΄ μλ 건 μ«μνμ μΌλ‘ μ묡μ λ³νν¨.
+ λ₯Ό λΆμ΄λ©΄ κ°λ¨νκ² μ«μνλΉμΌλ‘ μ묡μ λ³νμ μν¬ μ μλ€.
λΉ λ¬Έμμ΄(' '), λΉ λ°°μ΄([ ]) , null, false => 0
true => 1
κ°μ²΄, λΉλ°°μ΄μ΄ μλ λ°°μ΄, undifinedλ λ³ν x -> NaN κ° λ¨.
9.2.3 λΆλ¦¬μΈ νμ μΌλ‘ λ³ν
if λ¬Έ, for λ¬Έ λ±μ 쑰건μμ λΆλ¦¬μΈκ°μΌλ‘ νκ°λμ΄μΌν¨.
Truthy κ° (μ°Έκ°μΌλ‘ νκ°λλ κ°)
- falsy κ° μΈμ 무λ κ°
Falsy κ° (κ±°μ§μΌλ‘ νκ°λλ κ°)
- false
- undifined
- null
- 0, -0
- NaN
- λΉ λ¬Έμμ΄ ''
β ν·κ°λ¦΄ μ μλ Truthy
- {}
- []
- '0'
πΏ 9.3 λͺ μμ νμ λ³ν
κ°λ°μκ° μλμ μΌλ‘ νμ μ λ³ννλ λ°©λ²
1οΈβ£ νμ€ λΉνΈμΈ μμ±μ ν¨μλ₯Ό new μμ΄ νΈμΆνλ λ°©λ²
2οΈβ£ λΉνΈμΈ λ©μλλ₯Ό μ¬μ©νλ λ°©λ²
3οΈβ£ μ묡μ νμ λ³νμ μ΄μ©νλ λ°©λ²
9.3.1 λ¬Έμμ΄ νμ μΌλ‘ λ³ν
1οΈβ£ String ν¨μλ₯Ό new μ°μ°μ μμ΄ νΈμΆ
String(1); // "1"
2οΈβ£ .toString() μ΄μ©
(Infinity).toString(); // "Infinity"
3οΈβ£ λ¬Έμμ΄ μ°κ²° μ°μ°μλ₯Ό μ΄μ©
1 + ''; // "1"
true + ''; // "true"
NaN + ''; // 'NaN'
9.3.2 μ«μ νμ μΌλ‘ λ³ν
1οΈβ£ Number μμ±μ ν¨μλ₯Ό new μ°μ°μ μμ΄ νΈμΆ
2οΈβ£ parseInt, parseFloat ν¨μ μ΄μ© (λ¬Έμμ΄λ§ λ³ν κ°λ₯)
parseInt('0') // 0
3οΈβ£ + λ¨ν μ°μ μ°μ°μ μ΄μ©
+'1'; // 1
+true; // 1
4οΈβ£ * μ°μ μ°μ°μλ₯Ό μ΄μ©
'1' * 1; // 1
true * 1; // 1
9.3.3 λΆλ¦¬μΈ νμ μΌλ‘ λ³ν
1οΈβ£ Boolean μμ±μ ν¨μλ₯Ό new μ°μ°μ μμ΄ νΈμΆ
2οΈβ£ ! λΆμ λ Όλ¦¬ μ°μ°μλ₯Ό λλ² μ¬μ©
πΏ 9.4 λ¨μΆ νκ°
9.4.1 λ Όλ¦¬ μ°μ°μλ₯Ό μ¬μ©ν λ¨μΆ νκ°
λ Όλ¦¬ν© ( || ) λλ λ Όλ¦¬κ³± ( && ) μ°μ°μ ννμμ μΈμ λ 2κ°μ νΌμ°μ°μ μ€ μ΄λ νμͺ½μΌλ‘ νκ°λλ€.
λ Όλ¦¬κ³± &&
: λ κ° λͺ¨λ true λ‘ νκ° λ λ true λ₯Ό λ°ν.
μ’ν -> μ°ν μΌλ‘ νκ° μ§ν
μ’νμ΄ true -> μ°ν μ§ν : λλ²μ§Έ νΌμ°μ°μκ° λ Όλ¦¬κ³± μ°μ°μ ννμμ νκ° κ²°κ³Όλ₯Ό κ²°μ .
λ Όλ¦¬ν© ||
: νλλ§ trueλ‘ νκ°λμ΄λ true λ°ν.
μ’νμ΄ true λ©΄ λ€μκ» κ³μ° μν¨.
λ¨μΆ νκ°
: λ Όλ¦¬ μ°μ°μ κ²°κ³Όλ₯Ό κ²°μ νλ νΌμ°μ°μλ₯Ό νμ λ³ννμ§ μκ³ κ·Έλλ‘ μ§ν.
& ννμμ νκ°νλ λμ€μ νκ° κ²°κ³Όκ° νμ λ κ²½μ° λλ¨Έμ§ νκ³Ό κ³Όμ μ μλ΅ν¨.
-> if λ¬Έ λ체 κ°λ₯.
< λ¨μΆνκ°κ° μ μ©νκ² μ°μ΄λ μν©λ€ >
π΅ κ°μ²΄λ₯Ό κ°λ¦¬ν€μ§λ₯Ό κΈ°λνλ λ³μκ° null λλ undefined κ° μλμ§ νμΈνκ³ νλ‘νΌν°λ₯Ό μ°Έκ³ ν λ.
-> κΈ°λνλ λ³μμ κ°μ΄ null λλ undefined μΈ κ²½μ°
const elem;
const value = elem && elem.value;
π΅ ν¨μ 맀κ°λ³μμ κΈ°λ³Έκ°μ μ€μ ν λ
- μΈμ μ λ¬ μνλ©΄ undefined κ° λλλ° μ΄λ₯Ό λ°©μ§ν¨.
...
str = str || ''
9.4.2 μ΅μ λ 체μ΄λ μ°μ°μ ?.
μ’νμ νΌμ°μ°μκ° null λλ undefined μΈ κ²½μ°, undefined λ₯Ό λ°ννκ³ κ·Έλ μ§ μμΌλ©΄ μ°νμ νλ‘νΌμΉ νμ‘°λ₯Ό μ΄μ΄κ°.
elem?.value //elemκ° μμΌλ©΄ value λ₯Ό κ°μ Έμ΄
μ΅μ λ 체μ΄λμ΄ μκΈ°κΈ° μ μλ, && λ₯Ό μ¬μ©ν¨.
- νμ§λ§ 0, '' μΈ κ²½μ°λ κ°μ²΄λ‘ νκ°λ λκ° μμ΄μ λΆμ νν¨.
const str = '';
const length = str && str.length;
console.log(length) // ''
=> λ¬Έμμ΄μ κΈΈμ΄λ₯Ό μ°Έμ‘°νμ§ λͺ»νμ.
μ΅μ λ 체μ΄λ : Falsy κ° κ³Ό null, undefined κΉμ§ ν¬ν¨ν κ°μ΄λ©΄ -> μ°νμ νλ‘νΌν° μ°Έμ‘°λ‘ κ°.
9.4.3 null λ³ν© μ°μ°μ
??
μ’νμ νΌμ°μ°μκ° null λλ undefined μΈ κ²½μ° μ°ν λ°ν,
κ·Έλ μ§ μμΌλ©΄ μ’ν λ°ν
??λ λ³μμ κΈ°λ³Έκ°μ μ€μ ν λ μ μ©ν¨.
μλ μ μλ || κ° λμ μ¬μ©λλλ°,
'', 0 μ κ°μ§ κ²½μ° μλ κΈ°λ³Έκ°μΌλ‘ μ ν¨νκΈ° λλ¬Έμ μκΈ°μΉ μμ λμμ΄ λ°μν¨.
νμ§λ§ ?? λ Falsy κ°, μ΄λΌλ null, undefinde κ° μλλ©΄ μ’νμ νΌμ°μ°μλ₯Ό κ·Έλλ λ°ν.
'λ μ λͺ©λ‘ > λͺ¨λ₯λ€ Modern JS Deep Dive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λͺ¨λ₯λ€] 12μ₯ ν¨μ (0) | 2023.05.04 |
---|---|
[λͺ¨λ₯λ€] 11μ₯ μμ κ°κ³Ό κ°μ²΄μ λΉκ΅ (0) | 2023.05.03 |
[λͺ¨λ₯λ€] 03μ₯ μλ°μ€ν¬λ¦½νΈ κ°λ° νκ²½κ³Ό μ€ν λ°©λ² (0) | 2023.04.25 |
[λͺ¨λ₯λ€] 02μ₯ μλ°μ€ν¬λ¦½νΈλ? (0) | 2023.04.24 |
[λͺ¨λ₯λ€] 01μ₯ νλ‘κ·Έλλ° (0) | 2023.04.24 |