μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ νμ μ΄ μλ€. κ°μ νμ μ κ°λ°μμ μλμ λ°λΌ λ€λ₯Έ νμ μΌλ‘ λ³νν μ μλ€. κ°λ°μκ° μλμ μΌλ‘ κ°μ νμ μ λ³ννλκ²μ λͺ μμ νμ λ³ν λλ νμ μΊμ€ν μ΄λΌκ³ νλ€. λ°λ©΄ κ°λ°μμ μλμλ μκ΄μμ΄ ννμμ νκ°νλ λμ€μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ νμ μ΄ μλλ³νλκΈ°λ νλλ° μ΄λ₯Ό μ묡μ νμ λ³ν λλ νμ κ°μ λ³νμ΄λΌ νλ€.
μμ κ°μ΄λ λ³κ²½ λΆκ°λ₯ν κ°μ΄λ―λ‘ λͺ μμ νμ λ³νμ΄λ μ묡μ νμ λ³νμ μν΄ λ³κ²½λμ§ μλλ€. νμ λ³νμ΄λ κΈ°μ‘΄ μμ κ°μ μ¬μ©ν΄ λ€λ₯Έ νμ μ μλ‘μ΄ μμ κ°μ μμ±νλκ²μ΄λ€.
// μ«μ νμ
0 + '' // "0"
-0 + '' // "0"
1+ '' // "1"
-1 + '' // "-1"
NaN + '' // "NaN"
Infinity + '' // "Infinity"
-Infinity + '' // "-Infinity"
// λΆμΈλ¦¬μΈ νμ
true + '' // "true"
false + '' // "false"
// null νμ
null + '' // "null"
// undefined νμ
undefined + '' // "undefined"
// μ¬λ² νμ
(Symbol()) + '' // "TypeError"
// κ°μ²΄ νμ
({}) + '' // "[object Object]"
Math + '' // "[object Math]"
[] + '' // ""
[10, 20] + '' // "10, 20"
(function(){}) + '' // "function()"
Array + '' // "function Array() {[native code]}"
// μ«μ νμ
+'' // 0
+'0' // 0
+'1' // 1
+'string' // NaN
// λΆμΈλ¦¬μΈ νμ
+true // 1
+false // 0
// null νμ
+null // 0
// undefined νμ
+undefined // NaN
// μ¬λ² νμ
+Symbol() // TypeError
// κ°μ²΄ νμ
+{} // NaN
+[] // 0
+[10, 20] // NaN
+(function(){}) // NaN
μλ°μ€ν¬λ¦½νΈ μμ§μ λΆμΈλ¦¬μΈ νμ μ΄ μλ κ°μ Truthy κ° λλ Falsy κ°μΌλ‘ ꡬλΆν΄ κ°κ° trueμ falseλ‘ μ묡μ νμ λ³ν νλ€. λ€μμ falseλ‘ νκ°λλ Falsy κ°μ΄λ€. Falsyμ Truthy κ° μμ λλν(!)λ₯Ό λΆμ΄μ£Όλ©΄ κ°κ° trueμ falseλ‘ μ λ¬λλ€.
κ°λ°μμ μλμ λ°λΌ λͺ μμ μΌλ‘ νμ μ λ³κ²½νλ λ°©λ²μ νμ€ λΉνΈμΈ μμ±μ ν¨μλ₯Ό new μ°μ°μ μμ΄ νΈμΆνλ λ°©λ², λΉνΈμΈ λ©μλλ₯Ό μ¬μ©νλ λ°©λ², μ묡μ νμ λ³ν λ°©λ²μ΄ μλ€.
π§ νμ€ λΉνΈμΈ μμ±μ ν¨μμ λΉνΈμΈ λ©μλ
νμ€ λΉνΈμΈ μμ±μ ν¨μμ νμ€ λΉνΈμΈ λ©μλλ μλ°μ€ν¬λ¦½νΈμμ κΈ°λ³Έ μ 곡νλ ν¨μλ€. νμ€ λΉνΈμΈ μμ±μ ν¨μλ κ°μ²΄λ₯Ό μμ±νκΈ° μν ν¨μμ΄λ©° new μ°μ°μμ ν¨κ» νΈμΆνλ€. νμ€ λΉνΈμΈ λ©μλλ μλ°μ€ν¬λ¦½νΈμμ κΈ°λ³Έ μ 곡νλ λΉνΈμΈ κ°μ²΄μ λ©μλλ€.
String μμ±μ ν¨μλ₯Ό new
μ°μ°μ μμ΄ νΈμΆνλ λ°©λ²
// μ«μ νμ
=> λ¬Έμμ΄ νμ
String(1); // "1"
String(NaN); // "NaN"
String(Infinity); // "Infinity"
// λΆμΈλ¦¬μΈ νμ
=> λ¬Έμμ΄ νμ
String(true) // "true"
String(false) // "false"
Object.prototype.toString
λ©μλλ₯Ό μ¬μ©νλ λ°©λ²
// μ«μ νμ
=> λ¬Έμμ΄ νμ
(1).toString(); // "1"
(NaN).toString(); // "NaN"
(Infinity)toString(); // "Infinity"
// λΆμΈλ¦¬μΈ νμ
=> λ¬Έμμ΄ νμ
(true).toString(); // "true"
(false).toString(); // "false"
λ¬Έμμ΄ μ°κ²° μ°μ°μλ₯Ό μ΄μ©νλ λ°©λ²
// μ«μ νμ
=> λ¬Έμμ΄ νμ
1 + '' // "1"
NaN + '' // "NaN"
Infinity + '' // "Infinity"
// λΆμΈλ¦¬μΈ νμ
=> λ¬Έμμ΄ νμ
true + '' // "true"
false + '' // "false"
new
μ°μ°μ μμ΄ νΈμΆνλ λ°©λ² // λ¬Έμμ΄ νμ
=> μ«μ νμ
Number('0'); // -> 0
Number('-1'); // -> -1
Number('10.53'); // -> 10.53
// λΆλ¦¬μΈ νμ
=> μ«μ νμ
Number(true); // -> 1
Number(false); // -> 0
parseInt
, parseFloat
ν¨μλ₯Ό μ¬μ©νλ λ°©λ²(λ¬Έμμ΄λ§ μ«μ νμ
μΌλ‘ λ³ν κ°λ₯) parseInt('0'); // -> 0
parseInt('-1'); // -> -1
parseFloat('10.53'); // -> 10.53
+
λ¨ν μ°μ μ°μ°μλ₯Ό μ΄μ©νλ λ°©λ² // λ¬Έμμ΄ νμ
=> μ«μ νμ
+'0'; // -> 0
+'-1'; // -> -1
+'10.53'; // -> 10.53
// λΆλ¦¬μΈ νμ
=> μ«μ νμ
+true; // -> 1
+false; // -> 0
*
μ°μ μ°μ°μλ₯Ό μ΄μ©νλ λ°©λ² // λ¬Έμμ΄ νμ
=> μ«μ νμ
'0' * 1; // -> 0
'-1' * 1; // -> -1
'10.53' * 1; // -> 10.53
// λΆλ¦¬μΈ νμ
=> μ«μ νμ
true * 1; // -> 1
false * 1; // -> 0
new
μ°μ°μ μμ΄ νΈμΆνλ λ°©λ² // λ¬Έμμ΄ νμ
=> λΆλ¦¬μΈ νμ
Boolean('x'); // -> true
Boolean(''); // -> false
Boolean('false'); // -> true
// μ«μ νμ
=> λΆλ¦¬μΈ νμ
Boolean(0); // -> false
Boolean(1); // -> true
Boolean(NaN); // -> false
Boolean(Infinity); // -> true
// null νμ
=> λΆλ¦¬μΈ νμ
Boolean(null); // -> false
// undefined νμ
=> λΆλ¦¬μΈ νμ
Boolean(undefined); // -> false
// κ°μ²΄ νμ
=> λΆλ¦¬μΈ νμ
Boolean({}); // -> true
Boolean([]); // -> true
!
λΆμ λ
Όλ¦¬ μ°μ°μλ₯Ό λ λ² μ¬μ©νλ λ°©λ² // λ¬Έμμ΄ νμ
=> λΆλ¦¬μΈ νμ
!!'x'; // -> true
!!''; // -> false
!!'false'; // -> true
// μ«μ νμ
=> λΆλ¦¬μΈ νμ
!!0; // -> false
!!1; // -> true
!!NaN; // -> false
!!Infinity; // -> true
// null νμ
=> λΆλ¦¬μΈ νμ
!!null; // -> false
// undefined νμ
=> λΆλ¦¬μΈ νμ
!!undefined; // -> false
// κ°μ²΄ νμ
=> λΆλ¦¬μΈ νμ
!!{}; // -> true
!![]; // -> true
λ Όλ¦¬κ³±(&&) μ°μ°μλ λ κ°μ νΌμ°μ°μκ° λͺ¨λ trueλ‘ νκ°λ λ trueλ₯Ό λ°ννλ€. λ Όλ¦¬κ³± μ°μ°μλ μ’νμμ μ°νμΌλ‘ νκ°κ° μ§νλλ€. λ Όλ¦¬κ³± μ°μ°μλ λ Όλ¦¬ μ°μ°μ κ²°κ³Όλ₯Ό κ²°μ νλ λ λ²μ§Έ νΌμ°μ°μ, μ¦ λ¬Έμμ΄ βDogβλ₯Ό κ·Έλλ‘ λ°ννλ€.
λ Όλ¦¬ν©(||) μ°μ°μλ λ κ°μ νΌμ°μ°μ μ€ νλλ§ trueλ‘ νκ° λμ΄λ trueλ₯Ό λ°ννλ€. λ Όλ¦¬ν© μ°μ°μλ μ’νμμ μ°νμΌλ‘ νκ°κ° μ§νλλ€. λ Όλ¦¬ν© μ°μ°μλ κ²°κ³Όλ₯Ό κ²°μ ν 첫 λ²μ§Έ νΌμ°μ°μ, μ¦ λ¬Έμμ΄ βCatβ μ κ·Έλλ‘ λ°ννλ€.
λ Όλ¦¬κ³± μ°μ°μμ λ Όλ¦¬ν© μ°μ°μλ μ΄μ²λΌ λ Όλ¦¬ μ°μ°μ κ²°κ³Όλ₯Ό κ²°μ νλ νΌμ°μ°μλ₯Ό νμ λ³ννμ§ μκ³ κ·Έλλ‘ λ°ννλ€. μ΄λ₯Ό λ¨μΆ νκ°λΌκ³ νλ€. λ¨μΆ νκ°λ ννμμ νκ°νλ λμ€μ νκ°κ²°κ³Όκ° νμ λ κ²½μ° λλ¨Έμ§ νκ° κ³Όμ μ μλ΅νλ κ²μ λ§νλ€. λ¨μΆνκ°λ₯Ό μ¬μ©νλ©΄ if λ¬Έμ λ체ν μ μμΌλ©°, μΌν 쑰건 μ°μ°μλ if-else λ¬Έμ λ체ν μ μλ€.
true || anything // true
false || anything // anything
true && anything // anything
false && anything // false
var done = true;
var message = '';
// if...else λ¬Έ
if (done) message = 'μλ£';
else message = 'λ―Έμλ£';
console.log(message); // μλ£
// if...else λ¬Έμ μΌν 쑰건 μ°μ°μλ‘ λ체 κ°λ₯νλ€.
message = done ? 'μλ£' : 'λ―Έμλ£';
console.log(message); // μλ£
ES11(ECMAScript2020)μ λμ λ μ΅μ λ 체μ΄λ μ°μ°μ (?.)λ μ’νμ νΌμ°μ°μκ° null λλ undefinedμΈ κ²½μ° undefinedλ₯Ό λ°ννκ³ , κ·Έλ μ§ μμΌλ©΄ μ°νμ νλ‘νΌν° μ°Έμ‘°λ₯Ό μ΄μ΄κ°λ€.
var elem = null;
// elemμ΄ null λλ undefinedμ΄λ©΄ undefinedλ₯Ό λ°ννκ³ , κ·Έλ μ§ μμΌλ©΄ μ°νμ νλ‘νΌν° μ°Έμ‘°λ₯Ό μ΄μ΄κ°λ€.
var value = elem?.value;
console.log(value); // undefined
ES11(ECMAScript2020)μ λμ λ null λ³ν© μ°μ°μ ??λ μ’νμ νΌμ°μ°μ null λλ undefinedμΈ κ²½μ° μ°νμ νΌμ°μ°μλ₯Ό λ°ννκ³ , κ·Έλ μ§ μμΌλ©΄ μ’νμ νΌμ°μ°μλ₯Ό λ°ννλ€. null λ³ν© μ°μ°μ ??λ λ³μμ κΈ°λ³Έκ°μ μ€μ ν λ μ μ©νλ€.
// μ’νμ νΌμ°μ°μκ° null λλ undefinedμ΄λ©΄ μ°νμ νΌμ°μ°μλ₯Ό λ°ννκ³ ,
// κ·Έλ μ§ μμΌλ©΄ μ’νμ νΌμ°μ°μλ₯Ό λ°ννλ€.
var foo = null ?? 'default string'
console.log(foo); // "default string"