μ°Έκ³ ) λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive
μλ°μ€ν¬λ¦½νΈμμ§μ κ°κΈμ μλ¬λ₯Ό λ°μμν€μ§ μλλ‘ μ묡μ νμ λ³νμ ν΅ν΄ ννμμ νκ°ν©λλ€.
0 + '' // '0'
-1 + '' // '-1'
NaN + '' // 'NaN'
false + '' // 'false'
null + '' // 'null'
({}) + '' // '[object object]'
[] + '' // ''
[10,20] + '' // '10,20'
+[] + // 0
{} + // NaN
null - // NaN
false - // -0
""[10]; // -0 // NaN
undefined; // NaN
μλ°μ€ν¬λ¦½νΈ μμ§μ λΆλ¦¬μΈ νμ μ΄ μλ κ°μ Truthy κ° λλ Falthy κ°μΌλ‘ ꡬλΆνλ€.
νμ€ λΉνΈμΈ μμ±μ ν¨μλ₯Ό newμ°μ°μ μμ΄ νΈμΆνλ λ°©λ²κ³Ό λΉνΈμΈ λ©μλλ₯Ό μ¬μ©νλ λ°©λ², μ묡μ νμ λ³νμ μ΄μ©νλ€.
String(NaN); // 'NaN'
(true).toString(); 'true'
[] + '' // ''
Number(true) // 1
parseInt('1.6') // 1
+[] // NaN
false * 1 // 0
Boolean(Infinity) // true
!!{} // true
ννμμ νκ°νλ λμ€μ νκ° κ²°κ³Όκ° νμ λ κ²½μ° λλ¨Έμ§ νκ° κ³Όμ μ μλ΅νλ κ²μ λ§νλ€.
let done = true;
let msg = done && "μλ£";
console.log(msg); // 'μλ£'
true || anything; // true
false || anything; // anything
true && anything; // anything
false && anything; // false
π‘ λ
Όλ¦¬κ³±(&&)μ 첫λ²μ§Έ Falthyκ°μ λ°ν, λͺ¨λ TruthyμΌ κ²½μ° λ§μ§λ§ νΌμ°μ°μλ₯Ό λ°ν!!
π‘ λ
Όλ¦¬ν©(||)μ 첫λ²μ§Έ Truthyκ°μ λ°ν, λͺ¨λ FalthyμΌ κ²½μ° λ§μ§λ§ νΌμ°μ°μλ₯Ό λ°ν!!
"cat" || true; //'cat'
true || "cat"; // true
true && "cat"; // 'cat'
false && "cat"; // false
false && null; // false
ν¨μλ₯Ό νΈμΆν λ μΈμλ₯Ό μ λ¬νμ§ μμΌλ©΄ 맀κ°λ³μμλ undefinedκ° ν λΉλλ€. μ΄λ λ¨μΆνκ°λ₯Ό μ¬μ©ν΄ 맀κ°λ³μμ κΈ°λ³Έκ°μ μ€μ νλ©΄ undefinedλ‘ μΈν΄ λ°μν μ μλ μλ¬λ₯Ό λ°©μ§ν μ μλ€.
function getStringLength(str) {
str = str || "";
return str.length;
}
getStringLength(); // 0
getStringLength("hi"); // 2
// 맀κ°λ³μμ κΈ°λ³Έκ° μ€μ
function getStringLength(str = "") {
return str.length;
}
let str = "";
let length = str?.length;
console.log(length); // 0
length = str && str.length;
console.log(length); // ''
let foo = null ?? "default string";
console.log(foo); // 'default string'
// ''κ° μ ν¨ν κ°μΌ κ²½μ° ||보λ€λ ??μ¬μ©μ΄ μ ν©ν¨.
foo = "" ?? "default string";
console.log(foo); // ''
foo = "" || "default string";
console.log(foo); // 'default string'