πνμ λ³ν
νμ λ³νμλ λκ°μ§ μ’ λ₯κ° μλ€.
1. λͺ μμ νμ λ³ν(νμ μΊμ€ν )
= κ°λ°μκ° μλμ μΌλ‘ νμ μ λ³ννλ κ²
const num = 1;
const str = num.toString();
console.log(typeof str, str); // string 1
console.log(typeof num, num); // number 1
2. μ묡μ νμ λ³ν(νμ κ°μ λ³ν)
= κ°λ°μμ μλμλ μκ΄μμ΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ νμ μ΄ μλ λ³νλλ κ²
const num = 1;
const str = num + " ";
console.log(typeof str, str); // string 1
console.log(typeof num, num); // number 1
μ¬κΈ°μ μλ°μ€ν¬λ¦½νΈ μμ§μ num + " "λ₯Ό νκ°νκΈ° μν΄ numκ°μ λ°νμΌλ‘ μλ‘μ΄ λ¬Έμμ΄ κ° '1'μ μμ±νκ³ νκ°
μ΄ λ μμλ‘ λ§λ '1'μ μ묡μ μΌλ‘ νμ
μ λ³νμμΌ μ¬μ©ν ν, νλ²λ§ μ°κ³ λ²λ¦°λ€.
νμ§λ§ λκ°μ§ λ°©λ² λͺ¨λ κΈ°μ‘΄ κ°μ νμ μ μ§μ λ³κ²½νλ κ²μ μλ
νμ λ³νμ κΈ°μ‘΄μ μμκ°μ μ΄μ©ν΄ λ€λ₯Έ νμ μ μλ‘μ΄ μμ κ°μ μμ±νλ κ²μ΄κΈ° λλ¬Έμ΄λ€.
- μ묡μ νμ λ³νμ κ°λ°μμ μμ§κ° 보μ΄μ§ μκΈ° λλ¬Έμ μ€λ₯λ₯Ό μμ°ν κ°λ₯μ±μ΄ μλ€
- νμ§λ§, κ°λ μ± μΈ‘λ©΄μμλ λͺ μμ λ³΄λ€ μ’μ μ μλ€ (μ: (10).toString()보λ€λ 10 + ' 'μ΄ λ κ°κ²°)
- κ°μ₯ μ’μ 건 μ½λλ₯Ό μμΈ‘ν μ μκ³ , λ€λ₯Έ μ¬λμ΄ λ³΄κΈ°μλ μ΄ν΄νκΈ°κ° μ¬μμΌνλ€.
π€ μ묡μ νμ λ³ν
μ묡μ νμ λ³νμ λ¬Έμμ΄, μ«μ, booleanμΌλ‘ νμ μ μλ λ³ν μν¨λ€.
1. λ¬Έμμ΄λ‘ λ³ν
1 + "2" // "12"
JS Is Weirdμ μλ λ¬Έμ μ€μ μ΄λ°κ² μλ€..
μ΄ λ¬Έμ μ λ΅μ "33"μΈλ°, μ묡μ νμ λ³νμ λ°λΌμ 1 + 2λ μ°μ 3μ΄κ³ , 3 + "3"μ΄ λλ―λ‘ "33"μ΄ λλ κ²μ΄λ€..
κ·Όλ° μ¬κΈ°μ λ¬Έμμ΄μ΄ μ€κ°μ λ€μ΄κ°λ©΄ μ΄λ°μμΌλ‘ "123"μ΄ λμ΄λ²λ¦°λ€.
"1" + 2 + 3; // -> "123"
1 + "2" + 3; // -> "123"
κ·Έλ¦¬κ³ , μ΄λ° μ°μ°μ ννμμμλ§ μ묡μ νμ λ³νμ΄ μΌμ΄λλ 건 μλλ€.
ES6μμ μ¬μ©λλ ν νλ¦Ώ 리ν°λ΄μμμ ννμ μ½μ λ λ¬Έμμ΄λ‘ νμ λ³νμ μΌμΌν¨λ€.
`1 + 1 = ${1 + 1}` // "1 + 1 = 2"
μΆκ°μ μΈ μμλ€
// μ«μ
0 + " " // "0"
-1 + " " // "-1"
NaN + " " // "NaN"
Infinity + " " // "Infinity"
// boolean νμ
true + " " // "true"
// etc
null + " " // "null"
undefined + " " // "undefined"
(Symbol()) + " " // TypeError: Cannot convert a Symbol value to a string
// κ°μ²΄
({}) + " " // "[object Object]"
Math + " " // "[object Math]"
[] + " " // ""
[10, 20] + " " // "10, 20"
(function(){}) + " " // "function(){}"
Array + " " // "function Array() { [native code] }"
μ¬κΈ°μ Symbol()μ λμ§?
ES6μμ λμ λ 7λ²μ§Έ μμ νμ μΌλ‘
κ³ μ ν ν€λ₯Ό κ°μ§λ©° μ€λͺ μ μΆκ°ν μ μλ€.
const sym = Symbol("μ€λͺ
")
console.log(sym.description) // "μ€λͺ
"
κ°μ²΄μ κ³ μ ν νλ‘νΌν° ν€λ₯Ό μμ±νλ κ²μ μ¬μ©ν μ μλ€.
const MY_KEY = Symbol();
const obj = {
[MY_KEY]: "λΉλ° κ°"
};
console.log(obj[MY_KEY]); // "λΉλ° κ°"
Object.keys(obj); // [] - Symbol ν€λ μΌλ°μ μΈ μνμμ μ μΈλ¨
new Symbol()λ‘λ μ¬μ©ν μ μκ³ , Symbolμ νΉλ³ν μ©λλ₯Ό 보νΈνκΈ° μν΄ μ묡μ νμ λ³νμ μ νλλ€.
2. μ«μμ΄λ‘ λ³ν
1 - "1" // 0
1 * "10" // 10
1 / "one" // NaN
μ°μ μ°μ°μλ₯Ό μ¬μ©νλ μμμ λ¬Έμμ΄μ μ«μλ‘ λ°κΏ μ μλ€λ©΄ μ«μ νμ μΌλ‘ λ³νμμΌμ κ³μ°μ΄ μ§νλλ€.
μ΄λ λ§μ½ λ¬Έμμ΄μ μ«μλ‘ λ³νμν¬ μ μλ€λ©΄ κ²°κ³Όκ°μ NaNμ΄ λλ€.
μ°μ μ°μ°μλΏλ§ μλλΌ λΉκ΅μ°μ°μλ ν¬κΈ°λ₯Ό λΉκ΅νκΈ° μν΄μ μ«μ νμ μΌλ‘ λ³νμν¨λ€.
"1" > 0 // true
μλ°μ€ν¬λ¦½νΈλ + λ¨ν μ°μ°μλ₯Ό μ¬μ©νλ©΄ μ«μκ° μλ κ°μ μ«μ νμ μΌλ‘ μ묡μ νμ λ³νλ₯Ό μν¨λ€.
1 + " " // "1" -> μ΄κ±΄ λ¬Έμμ΄
+ "1" // 1 -> μ΄κ±΄ μ«μ
μ΄λ κ² λλ μ΄μ λ
첫λ²μ§Έ +λ μ΄ν μ°μ°μλ‘ νΌμ°μ°μ μ€ νλκ° λ¬Έμμ΄μ΄λ©΄ λ¬Έμμ΄λ‘ μ°κ²°νλ μ°μ°μ νκ³ ,
λλ²μ§Έ +λ λ¨ν μ°μ°μλ‘ νΌμ°μ°μλ₯Ό μ«μλ‘ λ³νμ μλνλ μ°μ°μμ΄κΈ° λλ¬Έμ΄λ€.
μ΄ μΈμ μ«μμ΄λ‘ λ³ννλ μμ
+" " // 0
+"κΈμ" // NaN
+true // 1
+null // 0
+undefined // NaN
+{} // NaN
+[] // 0
λΉ λ¬Έμμ΄, λΉ λ°°μ΄, null, falseλ 0μΌλ‘, trueλ 1λ‘ λ³νλκ³ λλ¨Έμ§λ NaNμ΄ λλ€.
μ¬κΈ°μ +{}μ +[]κ° μλ‘ λ€λ₯Έ μ΄μ
+{} // NaN
// λ΄λΆ λ³ν κ³Όμ
// 1. {}λ₯Ό μμκ°μΌλ‘ λ³ν (ToPrimitive)
// - valueOf() νΈμΆ -> κ°μ²΄ μμ λ°ν
// - toString() νΈμΆ -> "[object Object]" λ°ν
// 2. "[object Object]"λ₯Ό μ«μλ‘ λ³ν -> NaN
+[] // 0
// λ΄λΆ λ³ν κ³Όμ
// 1. []λ₯Ό μμκ°μΌλ‘ λ³ν (ToPrimitive)
// - valueOf() νΈμΆ -> λ°°μ΄ μμ λ°ν
// - toString() νΈμΆ -> "" λ°ν
// 2. ""λ₯Ό μ«μλ‘ λ³ν -> 0
3. λΆλ¦¬μΈ νμ λ‘ λ³ν
JS μμ§μ λΆλ¦¬μΈ νμ μ΄ μλ κ°μ Truthyκ°( = μ°ΈμΌλ‘ νκ°λλ κ°)κ³Ό Falsy κ°(= κ±°μ§μΌλ‘ νκ°λλ κ°)μΌλ‘ ꡬλΆνλ€.
Falsyλ‘ νκ°λλ κ°λ€
- false
- undefined
- null
- 0, -0
- NaN
- λΉλ¬Έμμ΄(" ")
Falsyλ‘ νκ°λλ κ°λ€ μ΄μΈμλ Truthyκ°μ΄λ€.
if ("0") console.log("λΉλ¬Έμμ΄μ΄ μλλ©΄ True");
if ({}) console.log("κ°μ²΄λ true 1");
if ([]) console.log("κ°μ²΄λ true 2");
μμ μμ λͺ¨λ μΆλ ₯λλ―λ‘, Truthyκ°μ κ°μ§μ μ μ μλ€.
π― λͺ μμ νμ λ³ν
κ°λ°μμ μλμ λ°λΌμ λͺ μμ μΌλ‘ νμ μ λ³ννλ λ°©λ²μ μ¬λ¬κ°μ§κ° μλ€. μμ±μ ν¨μ(String, Number, Boolean)λ₯Ό newμμ΄ νΈμΆνλ λ°©λ², λΉνΈμΈ λ©μλ(toString λ±)μ μ΄μ©νλ λ°©λ², μ묡μ νμ λ³νμ νμ©νλ λ°©λ² λ±μ΄ μλ€.
1. λ¬Έμμ΄λ‘ λ³ννλ λ°©λ²
- String μμ±μ ν¨μλ₯Ό new μ°μ°μ μμ΄ νΈμΆνλ λ°©λ²
- Object.prototype.toString λ©μλλ₯Ό μ¬μ©νλ λ°©λ²
- λ¬Έμμ΄ μ°κ²° μ°μ°μλ₯Ό μ¬μ©νλ λ°©λ²
// String μμ±μ ν¨μ μ¬μ©
String(1) // "1"
String(Infinity) // "Infinity"
// toString λ©μλ μ¬μ©
(1).toString() // "1"
(true).toString() // "true"
// λ¬Έμμ΄ μ°κ²° μ°μ°μ μ¬μ©
1 + " " // "1"
false + " " // "false"
2. μ«μλ‘ λ³ννλ λ°©λ²
- Number μμ±μ ν¨μλ₯Ό new μ°μ°μ μμ΄ νΈμΆ
- parseInt, parseFloat ν¨μλ₯Ό μ¬μ©
- + λ¨ν μ°μ μ°μ°μ μ¬μ©
- * μ°μ μ°μ°μ μ¬μ©
// Number μμ±μ μ¬μ©
Number("1") // 1
Number(true) // 1
// parseInt, parseFloat μ¬μ©
parseInt("23") // 23
parseFloat("11.7") // 11.7
// + λ¨ν μ°μ μ°μ°μ μ¬μ©
+"1" // 1
+true // 1
// * μ°μ μ°μ°μ μ¬μ©
"0" * 1 // 0
"-1" * 1 // -1
true * 1 // 1
3. booleanμΌλ‘ λ³ννλ λ°©λ²
- Boolean μμ±μ ν¨μλ₯Ό new μ°μ°μ μμ΄ νΈμΆνλ λ°©λ²
- ! λΆμ λ Όλ¦¬ μ°μ°μλ₯Ό λ λ² μ¬μ©νλ λ°©λ²
// Boolean μ°μ°μ μ¬μ©
Boolean("x") // true
Boolean(" ") // false(λΉλ¬Έμμ΄)
Boolean(NaN) // false
Boolean({}) // true
Boolean([]) // true
// ! λΆμ λ
Όλ¦¬ μ°μ°μ λ λ² μ¬μ©
!!"x" // true
!!"" // false
!!NaN // false
!!null // false
!!{} // true
!![] // true
μ¬κΈ°κΉμ§ νκ³ λμ JS Is Weirdμ λ¬Έμ λ₯Ό λ€μ νμ΄λ³΄μ
μ΄κ±΄ λ΅μ΄ λκ° λμ¬κΉ
μ λ΅μ 1μ΄λ€..
μλνλ©΄ !![]κ° trueμ΄κ³ , μμ +κ° λΆλ건 + λ¨ν μ°μ°μμ΄λ―λ‘, +trueκ° λμ΄μ 1μ΄ λλ€.....μμ
μΆμ²
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive(μ΄μ λͺ¨, μν€λΆμ€)
'FrontEnd > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Javascript] μΌκΈ κ°μ²΄, ν¨μμ νλ‘νΌν° (0) | 2024.10.27 |
---|---|
[Javascript] λ¨μΆνκ° (1) | 2024.10.26 |
[JS] λ°±μ€μμ fs λͺ¨λλ‘ input λ°κΈ°(feat. VScodeμ λ°±μ€) (0) | 2024.06.18 |
[JS] JSμμ λ°°μ΄ λ§λ€κΈ°(Array, Array.of, Array.from) (0) | 2024.06.11 |
[JS] JavaScriptμμ import μ¨λ³΄κΈ° (0) | 2023.11.13 |