๐Ÿ“– ํƒ€์ž… ๋ณ€ํ™˜๊ณผ ๋‹จ์ถ• ํ‰๊ฐ€

c_yjยท2022๋…„ 6์›” 24์ผ
0

DeepDive

๋ชฉ๋ก ๋ณด๊ธฐ
6/42
post-thumbnail

โœ”๏ธ ํƒ€์ž… ๋ณ€ํ™˜ ์ด๋ž€?

๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ๊ฐ’์˜ ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋ช…์‹œ์  ํƒ€์ž… ๋ณ€ํ™˜ ๋˜๋Š” ํƒ€์ž… ์บ์ŠคํŒ…์ด๋ผ ํ•œ๋‹ค.

var x = 10;

// ๋ช…์‹œ์  ํƒ€์ž… ๋ณ€ํ™˜
// ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ํƒ€์ž… ์บ์ŠคํŒ…ํ•œ๋‹ค
var str = x.toString();
console.log(typeof str, str); // string 10

// x ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
console.log(typeof x, x); // number 10

๊ฐœ๋ฐœ์ž์˜ ์˜๋„์™€๋Š” ์ƒ๊ด€์—†์ด ํ‰๊ฐ€ํ•˜๋Š” ๋„์ค‘์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด ์•”๋ฌต์ ์œผ๋กœ ํƒ€์ž…์ด ์ž๋™ ๋ณ€ํ™˜๋˜๊ธฐ๋„ ํ•œ๋‹ค. ์ด๋ฅผ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜ ๋˜๋Š” ํƒ€์ž… ๊ฐ•์ œ ๋ณ€ํ™˜์ด๋ผ ํ•œ๋‹ค.

var x = 10;

// ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜
// ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ์—ฐ์‚ฐ์ž๋Š” ์ˆซ์ž ํƒ€์ž… x์˜ ๊ฐ’์„ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.
var str = x + '';
console.log(typeof str, str); // string 10

// x ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
console.log(typeof x, x); // number 10

โœ”๏ธ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ํ‘œํ˜„์‹์„ ํ‰๊ฐ€ํ•  ๋•Œ ๊ฐœ๋ฐœ์ž์˜ ์˜๋„์™€๋Š” ์ƒ๊ด€์—†์ด ์ฝ”๋“œ์˜ ๋ฌธ๋งฅ์„ ๊ณ ๋ คํ•ด ์•”๋ฌต์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ•์ œ ๋ณ€ํ™œ ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค.

// ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๋ชจ๋‘ ๋ฌธ์ž์—ด ํƒ€์ž…์ด์–ด์•ผ ํ•˜๋Š” ๋ฌธ๋งฅ
'10' + 2 // '102'

// ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๋ชจ๋‘ ์ˆซ์ž ํƒ€์ž…์ด์–ด์•ผ ํ•˜๋Š” ๋ฌธ๋งฅ
5 * '10' // 50

// ํ”ผ์—ฐ์‚ฐ์ž ๋˜๋Š” ํ‘œํ˜„์‹์ด ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…์ด์–ด์•ผ ํ•˜๋Š” ๋ฌธ๋งฅ
10 // true

โœ”๏ธ ๋ช…์‹œ์  ํƒ€์ž… ๋ณ€ํ™˜

  • ๋ฌธ์ž์—ด ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜

// 1. String ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ new ์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•
// ์ˆซ์ž ํƒ€์ž… => ๋ฌธ์ž์—ด ํƒ€์ž…
String(1); // "1"
String(NaN); // "NaN"
String(Infinity); // "Infinity"

// ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž… => ๋ฌธ์ž์—ด ํƒ€์ž…
String(true); // "true"
String(false); // "false"

// 2. Object.prototype.toString ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
// ์ˆซ์ž ํƒ€์ž… => ๋ฌธ์ž์—ด ํƒ€์ž…
(1).toString(); // "1"
(NaN).tostring(); // "NaN"
(Infinity).toString(); // "Infinity"
// ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž… => ๋ฌธ์ž์—ด ํƒ€์ž…
(true).toString(); // true
(false).toString(); // false

// 3. ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
// ์ˆซ์ž ํƒ€์ž… => ๋ฌธ์ž์—ด ํƒ€์ž…
true + ''; // 'true'
false + ''; // "false"
  • ์ˆซ์ž ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜
// 1. Number ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ new ์—ฐ์‚ฐ์ž ์—†์ด ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•
// ๋ฌธ์ž์—ด ํƒ€์ž… => ์ˆซ์ž ํƒ€์ž…
Number('0'); // 0
Number('-1'); // -1
Number('10.53') // 10.53
// ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž… => ์ˆซ์ž ํƒ€์ž…
Number(true); // 1
Number(false); // 0

// 2. parseInt, parseFloat ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•(๋ฌธ์ž์—ด๋งŒ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ)
// ๋ฌธ์ž์—ด ํƒ€์ž… => ์ˆซ์ž ํƒ€์ž…
parseInt('0'); // 0
parseInt('-1'); // -1
parseFloat('10.53'); // 10.53

// 3. + ๋‹จํ•ญ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
// ๋ฌธ์ž์—ด ํƒ€์ž… => ์ˆซ์ž ํƒ€์ž…
+'0'; // 0
+'-1'; // -1
+'10.53'; /// 10.53
// ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž… => ์ˆซ์ž ํƒ€์ž…
+true; // 1
+false; // 0

// 4. * ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
// ๋ฌธ์ž์—ด ํƒ€์ž… => ์ˆซ์ž ํƒ€์ž…
'0' * 1; // 0
'-1' * 1; // -1
'10.53' * 1; // 10.53
// ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž… => ์ˆซ์ž ํƒ€์ž…
true * 1; // 1
false * 1; // 0
  • ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜
// 1. Boolean ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ 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({}); // true
Boolean([]); // true

// 2. ! ๋ถ€์ • ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ๋‘ ๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
// ๋ฌธ์ž์—ด ํƒ€์ž… => ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…
!!'x'; // true
!!''; // false
!!'false'; // true
// ์ˆซ์ž ํƒ€์ž… => ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…
!!0; // false
!!1; // true
!!NaN; // false
!!Infinity; // true
// null ํƒ€์ž… => ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…
!!null; // false
// undefined; // false
!!undefined; // true
// ๊ฐ์ฒด ํƒ€์ž… => ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…
!!{}; // true
!![]; // true

โœ”๏ธ ๋‹จ์ถ• ํ‰๊ฐ€

  • ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ ๋‹จ์ถ• ํ‰๊ฐ€
// ๋…ผ๋ฆฌํ•ฉ ์—ฐ์‚ฐ์ž
'Cat' || 'Dog' // 'Cat'
false || 'Dog' // 'Dog'
'Cat' || false // 'Cat'

//๋…ผ๋ฆฌ๊ณฑ ์—ฐ์‚ฐ์ž
'Cat' && 'Dog' // 'Dog'
false && 'Dog' // false
'Cat' && false // false

๋‹จ์ถ• ํ‰๊ฐ€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด if ๋ฌธ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ค ์กฐ๊ฑด์ด truthy ๊ฐ’์ผ ๋–„ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋…ผ๋ฆฌ๊ณฑ ์—ฐ์‚ฐ์ž ํ‘œํ˜„์‹์œผ๋กœ if ๋ฌธ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.

var done = true;
var message = '';

// ์ฃผ์–ด์ง„ ์กฐ๊ฑด์ด true์ผ ๋–„
if (done) message = '์™„๋ฃŒ';

// if ๋ฌธ์€ ๋‹จ์ถ• ํ‰๊ฐ€๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•˜๋‹ค.
// done์ด true๋ผ๋ฉด message์— '์™„๋ฃŒ'๋ฅผ ํ• ๋‹น
message = done && '์™„๋ฃŒ';
console.log(message); // ์™„๋ฃŒ

์กฐ๊ฑด์ด Falsy ๊ฐ’์ผ ๋–„ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋…ผ๋ฆฌํ•ฉ ์—ฐ์‚ฐ์ž ํ‘œํ˜„์‹์œผ๋กœ if๋ฌธ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.

var done = false;
var message = '';

// ์ฃผ์–ด์ง„ ์กฐ๊ฑด์ด false์ผ ๋•Œ
if (!done) message = '๋ฏธ์™„๋ฃŒ';

// if ๋ฌธ์€ ๋‹จ์ถ• ํ‰๊ฐ€๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•˜๋‹ค.
// done์ด false๋ผ๋ฉด message์— '๋ฏธ์™„๋ฃŒ'๋ฅผ ํ• ๋‹น
message = done || '๋ฏธ์™„๋ฃŒ';
console.log(message); // ๋ฏธ์™„๋ฃŒ
  • ์˜ต์…”๋„ ์ฒด์ด๋‹ ์—ฐ์‚ฐ์ž ๐Ÿ”ฅ๐Ÿ”ฅ
    ES11์—์„œ ๋„์ž…๋œ ์˜ต์…”๋„ ์ฒด์ด๋‹ ์—ฐ์‚ฐ์ž ?.๋Š” ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ null ๋˜๋Š” undefined์ธ ๊ฒฝ์šฐ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์šฐํ•ญ์˜ ํ”„๋กœํผํ‹ฐ ์ฐธ์กฐ๋ฅผ ์ด์–ด๊ฐ„๋‹ค
var elem = null;

// elem์ด null ๋˜๋Š” undefined์ด๋ฉด undefined๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , 
// ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์šฐํ•ญ์˜ ํ”„๋กœํผํ‹ฐ ์ฐธ์กฐ๋ฅผ ์ด์–ด๊ฐ„๋‹ค.

var value = elem?.value;
console.log(value); // undefined
  • null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž ๐Ÿ”ฅ๐Ÿ”ฅ
    ES11์—์„œ ๋„์ž…๋œ null ๋ณ‘ํ•ฉ์—ฐ์‚ฐ์ž ??๋Š” ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ null ๋˜๋Š” undefined์ธ ๊ฒฝ์šฐ ์šฐํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž ??๋Š” ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค
// ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ null ๋˜๋Š” undefined์ด๋ฉด ์šฐํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ ,
// ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
var foo = null ?? "default string";
console.log(foo); // "default string"
profile
FrontEnd Developer

0๊ฐœ์˜ ๋Œ“๊ธ€