μ΄λ² μ₯μμ νμ λ³νμ λν΄ μμΈν λ€λ£Ήλλ€. μ’ λ₯μ κ·Έ λ΄μ©κΉμ§ λ§μ΄μ£ .
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ νμ μ΄ μ‘΄μ¬νλ©°, μ΄λ₯Ό λ³ννλ λ°©λ²μλ κ°λ°μμ μν΄ λ³νλλ λ°©λ²κ³Ό κ°λ°μμ μλμ μκ΄ μμ΄ λ³νλλ λ°©λ²μ΄ μμ΅λλ€.
-
νμ μΊμ€ν (Type Casting, λλ λͺ μμ νμ λ³ν(Explicit Coercion)) : κ°λ°μκ° μλμ μΌλ‘ κ°μ νμ μ λ°κΎΈλ λ°©λ²μ λλ€.
let a = 10; let b = a.toString(); // μ¬κΈ°μ νμ μΊμ€ν μ΄ μΌμ΄λ©λλ€. console.log(typeof b, b); // 'string', '10' console.log(typeof a, a); // 'number', 10
-
νμ κ°μ λ³ν(Type Coercion, λλ μ묡μ νμ λ³ν(Implicit Coercion)) : μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ νμ μ΄ μλ λ³νλλ λ°©λ²μ λλ€.
let a = 10; let b = a + ''; console.log(typeof b, b); // 'string', '10' console.log(typeof a, a); // 'number', 10
μμ λͺ¨λ νμ λ³νμ΄ κΈ°μ‘΄μ μμ κ°μ λ³κ²½νλ κ²μ μλλλ€! μμ κ°μ λΆλ³μ΄λ―λ‘ λ³νμ§ μμΌλκΉμ. μμ μμ λ₯Ό λ€μ λ³ΌκΉμ?
let a = 10; // 1λ²
let b = a + ''; // 2λ²
1λ²
: μ«μ 10μ κ°μ λ©λͺ¨λ¦¬μ μ μ₯νκ³ , aλΌλ λ³μκ° κ°λ¦¬ν€λλ‘ ν©λλ€.2λ²
: μλ°μ€ν¬λ¦½νΈ μμ§μ a λ³μμ μ«μ κ°μ λ°νμΌλ‘ μλ‘μ΄ λ¬Έμμ΄'10'
μ μμ±νκ³ , ννμ'10' + ''
λ₯Ό νκ°ν©λλ€.- μ΄ λ μ묡μ μΌλ‘ μμ±λ λ¬Έμμ΄
'10'
μ a λ³μμ μ¬ν λΉνμ§ μμ΅λλ€.
- μ΄ λ μ묡μ μΌλ‘ μμ±λ λ¬Έμμ΄
μ΄μ²λΌ μλ°μ€ν¬λ¦½νΈ μμ§μ ννμμ μλ¬ μμ΄ νκ°νκΈ° μν΄ μλμ κ°μ΄ μ°μ°ν©λλ€.
- νΌμ°μ°μμ κ°μ μ묡μ μΌλ‘ νμ λ³ννμ¬ μλ‘μ΄ νμ μ κ° μμ±
- λ¨ ν λ² μ¬μ©νκ³ λ²λ¦Ό
λͺ
μμ νμ
λ³νμ΄ κ°λ°μμ μν΄ λͺ
νν μ μ μμ΅λλ€. κ·Έμ λ°ν΄ μ묡μ νμ
λ³νμ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μλ λ³κ²½λλ―λ‘ κ°λ°μμ μμΈ‘
, μ¦ κ²½ν
μ μꡬνκ² λ©λλ€. μ€μν κ²μ, νμ
λ³νμ μ’
λ₯κ° μλλΌ κ°λ°μμμ νμ
μμ μ΄λ€ νμ
λ³νμ μ¬μ©ν΄μΌ κ°λ
μ±κ³Ό μ΄ν΄λ₯Ό λμΌ μ μλλ μ
λλ€.
μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μλμΌλ‘ λ³νλλ λ°©λ²μ λλ€. λ¬Έμμ΄, μ«μ, λΆλ¦¬μΈ νμ λ³νμ΄ μ‘΄μ¬ν΄μ.
- λ¬Έμμ΄ νμ
λ³ν :
(+)
μ°μ°μλ νΌμ°μ°μ μ€ νλ μ΄μμ΄ λ¬Έμμ΄μ΄λ―λ‘ λ¬Έμμ΄ μ°κ²° μ°μ°μλ‘ λμν©λλ€.
-
λ¨, ES6μ ν νλ¦Ώ 리ν°λ΄μ νκ°μ κ²°κ³Όλ₯Ό
λ¬Έμμ΄
λ‘ ννν©λλ€.let a = '10' + 2; // '102' let b = `10 + 2 = ${10 + 2}`; // '10 + 2 = 12'
-
λ λ§μ μμ λ₯Ό λ³ΌκΉμ?
ννμ κ²°κ³Ό console.log(0 + '');
'0' console.log(-0 + '');
'0' console.log(1 + '');
'1' console.log(-1 + '');
'-1' console.log(NaN + '');
'NaN' console.log(Infinity + '');
'Infinity' console.log(-Infinity + '');
'-Infinity' console.log(true + '');
'true' console.log(false + '');
'false' console.log(null + '');
'null' console.log(undefined + '');
'undefined' console.log((Symbol()) + '');
TypeError: Cannot convert a Symbol value to a string console.log(({}) + '');
'[object Object]' console.log(Math + '');
'[object Math]' console.log([] + '');
'' console.log([10, 20] + '');
'10,20' console.log((function(){}) + '');
'function(){}' console.log(Array + '');
'function Array() { [native code] }'
- μ«μ νμ
λ³ν :
(-, *, /)
λ λͺ¨λ μ°μ μ°μ°μλ‘, μ«μ κ°μ λ§λλ μν μ΄λ©° λͺ¨λ νΌμ°μ°μλ λ¬Έλ§₯μ λͺ¨λ μ«μ νμ μΌλ‘ λ³νλ©λλ€.
-
λ¨, λΉκ΅ μ°μ°μ
(>, <, >=, <=, ==)
λ νΌμ°μ°μμ ν¬κΈ°λ₯Ό λΉκ΅νλ―λ‘ λμΌνκ² μ«μ νμ λ³νμ΄ λ°μν©λλ€.let a = '1' > 0; // true let b = '0' == 0; // true
-
λ λ§μ μμ λ₯Ό λ³ΌκΉμ?
ννμ κ²°κ³Ό console.log(+'');
0 console.log(+'0');
0 console.log(+'1');
1 console.log(+'string');
NaN console.log(+true);
1 console.log(+false);
0 console.log(+null);
0 console.log(+undefined);
NaN console.log(+Symbol());
TypeError: Cannot convert a Symbol value to a number console.log(+{});
NaN console.log(+[]);
0 console.log(+[10, 20]);
NaN console.log(+(function(){}));
NaN
- λΆλ¦¬μΈ νμ λ³ν : μ μ΄λ¬Έ, μΌν 쑰건 μ°μ°μλ λ Όλ¦¬μ μΌλ‘ νκ°λμ΄μΌ ν©λλ€. λͺ¨λ νΌμ°μ°μλ λͺ¨λ λΆλ¦¬μΈ νμ μΌλ‘ λ³νλ©λλ€.
-
νΉμ΄νκ²λ μλ°μ€ν¬λ¦½νΈ μμ§μ λΆλ¦¬μΈ νμ μ΄ μλ κ°μ Truthy Value(μ°ΈμΌλ‘ νκ°λλ κ°), Falsy Value(κ±°μ§μΌλ‘ νκ°λλ κ°)μΌλ‘ ꡬλΆν©λλ€. Falsy Valueμ μ’ λ₯λ μλμ κ°μΌλ©°, Falsy Valueκ° μλ λͺ¨λ κ°λ€μ Truthy Valueμ λλ€.
false
undefined
null
0, -0
NaN
''(empty string)
-
λ λ§μ μμ λ₯Ό λ³ΌκΉμ?
ννμ κ²°κ³Ό if ('') {}
true if (true) {}
true if (0) {}
false if ('str') {}
true if (null) {}
false if (!false) {}
true if (!undefined) {}
true if (!null) {}
true if (!0) {}
true if (!NaN) {}
true if (!'') {}
true -
μΆκ°μ μΌλ‘, Falsy Valueμ Truthy Valueλ₯Ό λ°ννλ ννλ μλμ κ°μ΅λλ€.
if(!target) {} // targetμ΄ Falsy Valueλ©΄ true, Truthy Valueλ©΄ false if(!!value) {} // targetμ΄ Truthy Valueλ©΄ true, Falsy Valueλ©΄ false
κ°λ°μμ μλμ λ°λΌ κ°μ μ μΌλ‘ λ³ννλ λ°©λ²μ λλ€. νμ€ λΉνΈμΈ μμ±μ ν¨μ, λ©μλλ₯Ό μ¬μ©νμ¬ λ³νν©λλ€.
μμν λ¨μ΄κ° λμμ£ ? λΉνΈμΈ(built-in)μ΄λ μλ°μ€ν¬λ¦½νΈμμ κΈ°λ³Έμ μΌλ‘ μ 곡νλ κΈ°λ₯μ μΌμ»«μ΅λλ€.
νμ€ λΉνΈμΈ μμ±μ ν¨μλ μμ κ°μ κ°μΈλ Wrapper κ°μ²΄μ λλ€. String, Number, Booleanμ new μμ΄ νΈμΆνλ ννμ£ . νμ€ λΉνΈμΈ λ©μλλ λΉνΈμΈ κ°μ²΄μ 곡ν΅μ μΈ κΈ°λ₯μ μ μν μ§ν©μ λλ€. μ°μ μ μ΄λ κ²λ§ μμλμκ³ , μμΈν λ΄μ©μ λΉνΈμΈμ 곡λΆνλ μ₯μμ μ΄ν΄νμ£ !
- λ¬Έμμ΄ νμ λ³ν
-
String μμ±μ ν¨μ
λ₯Ό μ¬μ©νλ λ°©λ²μΌλ‘, new μ°μ°μλ₯Ό νΈμΆνμ§ μμ΅λλ€.let a = String(1); // '1'
-
Object.prototype.toString λ©μλ
λ₯Ό μ¬μ©νλ λ°©λ²μ λλ€.let a = Object.prototype.toString(1); // '1'
-
μ묡μ νμ λ³νμΈ
(+)
λ¬Έμμ΄ μ°κ²° μ°μ°μλ₯Ό μ¬μ©νλ λ°©λ²μ λλ€. μμ λ λ€λ£¨μ§ μμ΅λλ€. μμ μμΌλκΉμ! -
λ λ§μ μμ λ₯Ό λ³ΌκΉμ?
ννμ κ²°κ³Ό console.log(String(1));
'1' console.log(String(NaN));
'NaN' console.log(String(Infinity));
'Infinity' console.log(String(true));
'true' console.log(String(false));
'false' console.log((1).toString());
'1' console.log((NaN).toString());
'NaN' console.log((Infinity).toString());
'Infinity' console.log((true).toString());
'true' console.log((false).toString());
'false'
- μ«μ νμ λ³ν
-
Number μμ±μ ν¨μ
λ₯Ό μ¬μ©νλ λ°©λ²μΌλ‘, new μ°μ°μλ₯Ό νΈμΆνμ§ μμ΅λλ€.let a = Number('1'); // 1
-
parseInt, parseFloat λ©μλ
λ₯Ό μ¬μ©νλ λ°©λ²μ λλ€.let a = parseInt('1'); // 1 let b = parseFloat('1.00'); // 1.00
-
λ¨ν μ°μ μ°μ°μ
(+, *)
λ₯Ό μ¬μ©νλ λ°©λ²μ λλ€.let a = +'0'; // 0 let b = '0' * 1; // 0
-
λ λ§μ μμ λ₯Ό λ³ΌκΉμ?
ννμ κ²°κ³Ό console.log(Number('0'));
0 console.log(Number('-1'));
-1 console.log(Number('10.53'));
10.53 console.log(Number(true));
1 console.log(Number(false));
0 console.log(parseInt('0'));
0 console.log(parseInt('-1'));
-1 console.log(parseFloat('10.53'));
10.53 console.log(+'0');
0 console.log(+'-1');
-1 console.log(+'10.53');
10.53 console.log(+true);
1 console.log(+false);
0 console.log('0' * 1);
0 console.log('-1' * 1);
-1 console.log('10.53' * 1);
10.53 console.log(true * 1);
1 console.log(false * 1);
0
- λΆλ¦¬μΈ νμ λ³ν
-
Boolean μμ±μ ν¨μ
λ₯Ό μ¬μ©νλ λ°©λ²μΌλ‘, new μ°μ°μλ₯Ό νΈμΆνμ§ μμ΅λλ€.let a = Boolean('X'); // true let a = Boolean(''); // false
-
λΆμ λ Όλ¦¬ μ°μ°μ(!)
λ₯Ό λ λ² μ¬μ©νλ λ°©λ²μ λλ€.let a = !!'X'; // true let a = !!''; // false
-
λ λ§μ μμ λ₯Ό λ³ΌκΉμ?
ννμ κ²°κ³Ό console.log(Boolean('x'));
true console.log(Boolean(''));
false console.log(Boolean('false'));
true console.log(Boolean(0));
false console.log(Boolean(1));
true console.log(Boolean(NaN));
false console.log(Boolean(Infinity));
true console.log(Boolean(null));
false console.log(Boolean(undefined));
false console.log(Boolean({}));
true console.log(Boolean([]));
true console.log(!!'x');
true console.log(!!'');
false console.log(!!'false');
true console.log(!!0);
false console.log(!!1);
true console.log(!!NaN);
false console.log(!!Infinity);
true console.log(!!null);
false console.log(!!undefined);
false console.log(!!{});
true console.log(!![]);
true