Front-End/JavaScript

[JavaScript] 08. νƒ€μž… λ³€ν™˜

Bigone17 2022. 1. 27. 13:47

🟑 1. νƒ€μž… λ³€ν™˜

- μžλ°”μŠ€ν¬λ¦½νŠΈ λͺ¨λ“  κ°’μ—λŠ” νƒ€μž…μ΄ μžˆμŠ΅λ‹ˆλ‹€. κ°œλ°œμ„ ν•˜λ‹€ 보면 데이터 νƒ€μž…μ΄ μžλ™μœΌλ‘œ λ³€ν™˜μ΄ λ˜κ±°λ‚˜, κ°œλ°œμžκ°€ μ˜λ„μ μœΌλ‘œ 데이터 νƒ€μž…μ„ λ°”κΎΈλŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. κ°œλ°œμžκ°€ μ˜λ„μ μœΌλ‘œ λ°”κΎΈλŠ” 것을 λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜(Explicitcoercion) λ˜λŠ” νƒ€μž… μΊμŠ€νŒ…(Type casting)이라고 ν•©λ‹ˆλ‹€. 데이터 νƒ€μž…μ΄ μžλ™μœΌλ‘œ λ³€ν™˜λ˜λŠ” 것을 암묡적 νƒ€μž… λ³€ν™˜(Implicit coercion) λ˜λŠ” νƒ€μž… κ°•μ œ λ³€ν™˜(Type coercion)이라고 ν•©λ‹ˆλ‹€.

// λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜ (κ°œλ°œμžκ°€ λ³€κ²½ν•˜λŠ” 것)
let x = 10;

let str_x = x.toString(); // 숫자 νƒ€μž…μ„ 문자 νƒ€μž…μœΌλ‘œ λ³€κ²½(μΊμŠ€νŒ…)
console.log(typeof(str_x)); // 'string'




// 암묡적 νƒ€μž… λ³€ν™˜ (μžλ™μ μœΌλ‘œ λ³€κ²½λ˜λŠ” 것)
let y = 10;

let str_y = 10 + 'μ–΅'; // μˆ«μžμ— λ¬Έμžμ—΄μ„ λ”ν•˜λ©΄ μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ΄ 생성
console.log(typeof(str_y)); // 'string';

- λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜, 암묡적 νƒ€μž… λ³€ν™˜ λ‘˜ λ‹€ λ³€μˆ˜μ— ν• λ‹Ήλœ κ°’μ˜ νƒ€μž…μ„ λ³€κ²½ν•˜λŠ” 것이 μ•„λ‹Œ, λ³€κ²½ν•œ νƒ€μž…μ˜ μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 그러고 λ‚˜μ„œ λ³€κ²½λ˜κΈ° 전에 ν• λ‹Ήλœ 값듀이 λ‹€λ₯Έ λ³€μˆ˜μ—μ„œ μ“°κ³  μžˆμ§€ μ•Šλ‹€λ©΄ 가비지 μ½œλ ‰ν„°(μ²­μ†ŒλΆ€)에 μ˜ν•΄μ„œ λ©”λͺ¨λ¦¬μ—μ„œ μ œκ±°λ©λ‹ˆλ‹€.

 

 

🟑 2. 암묡적 νƒ€μž… λ³€ν™˜

 - 암묡적 νƒ€μž… λ³€ν™˜μ΄ λ°œμƒν•˜λ©΄ λ¬Έμžμ—΄, 숫자, booleanκ³Ό 같은 μ›μ‹œ νƒ€μž… 쀑 ν•˜λ‚˜μ˜ νƒ€μž…μœΌλ‘œ μžλ™ λ³€ν™˜λ©λ‹ˆλ‹€.

 

🟣 2.1 λ¬Έμžμ—΄ νƒ€μž…μœΌλ‘œ λ³€ν™˜ (μˆ«μžμ—μ„œ 문자둜)

// λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μž
1 + "2" // "12"

10 + " " // "10"

 - 숫자 νƒ€μž…μ— λ¬Έμžμ—΄μ„ λ”ν•˜λ©΄ μƒˆλ‘œμš΄ λ¬Έμžμ—΄ νƒ€μž…μ΄ λ°˜ν™˜λ©λ‹ˆλ‹€.

 

🟣 2.2 숫자 νƒ€μž…μœΌλ‘œ λ³€ν™˜ 

1 - '10' // -9

1 * '10' // 10

1 / '10' // 0.1

+'' // 0

+'0' // 0

// boolean
+true // 1
+false // 0


// null 
+null // 0

- 숫자 νƒ€μž…κ³Ό 문자 νƒ€μž…μ„ μ‚°μˆ˜ μ—°μ‚°(+μ œμ™Έ)을 ν•˜λ©΄ 문자 νƒ€μž…μ΄ 암묡적 νƒ€μž… λ³€ν™˜μ— μ˜ν•΄μ„œ 숫자 νƒ€μž…μœΌλ‘œ λ³€ν™˜μ΄ 된 ν›„ 연산이 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. 

- 문자, boolean, null νƒ€μž… λ“± μ•žμ— +μ—°μ‚°μžλ₯Ό 뢙이면 암묡적 νƒ€μž… λ³€ν™˜μœΌλ‘œ 인해 숫자 νƒ€μž…μœΌλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€. true 값은 1, false 값은 0이 되고, null 값도 boolean νƒ€μž…μ—μ„  falseμ΄λ―€λ‘œ 0으둜 λ³€ν™˜λ©λ‹ˆλ‹€.

 

🟣 2.3 boolean νƒ€μž…μœΌλ‘œ λ³€ν™˜

 - ifλ¬Έμ΄λ‚˜ forλ¬Έκ³Ό 같은 μ œμ–΄λ¬Έμ˜ 쑰건식은 boolean 값을 λ°˜ν™˜ν•΄μ•Ό λ©λ‹ˆλ‹€. κ·Έλž˜μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μ œμ–΄λ¬Έμ˜ μ‘°κ±΄μ‹μ˜ 평가 κ²°κ³Όκ°€ boolean 값이 μ•„λ‹ˆλΌλ©΄ 암묡적 νƒ€μž… λ³€ν™˜μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

if('') {
	console.log('빈 λ¬Έμžμ—΄');
}

if(true) {
	console.log('boolean');
}

if(0) {
	console.log('숫자');
}

if('str') {
	console.log('λ¬Έμžμ—΄');
}

if(null) {
	console.log('nullνƒ€μž…');
}

// boolean
// λ¬Έμžμ—΄

- μœ„ μ˜ˆμ‹œμ™€ 같이 boolean 값이 μ•„λ‹Œ νƒ€μž…μ΄ 쑰건식에 λ“€μ–΄κ°€λ©΄ 암묡적 νƒ€μž… λ³€ν™˜μ΄ μΌμ–΄λ‚˜λŠ”λ°, μ΄λ•Œ Truthyκ°’(참으둜 인식할 κ°’) λ˜λŠ” Falsyκ°’(κ±°μ§“μœΌλ‘œ 인식할 κ°’)으둜 κ΅¬λΆ„λ˜μ–΄ TruthyλŠ” true둜 FalsyλŠ” false둜 λ³€ν™˜λ©λ‹ˆλ‹€.

Truthy Falsy
- true
- λ¬Έμžμ—΄ (빈 λ¬Έμžμ—΄ μ œμ™Έ) : 'μ•ˆλ…•ν•˜μ„Έμš”'
- 숫자 (0, -0은 μ œμ™Έ) : 1, 2, -1, -20
- λ°°μ—΄ : [], [1, 2, 3, 4]
- 객체 : {}, {a:1, b:2, c:3}
- false
- undefined
- null
- 0, -0
- NaN
- "" , '' (λΉˆλ¬Έμžμ—΄)

 

 

 

🟑 3. λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜

 

🟣 3.1 λ¬Έμžμ—΄ νƒ€μž…μœΌλ‘œ λ³€ν™˜

 - λ¬Έμžμ—΄ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 방법은 주둜 3가지가 μžˆμŠ΅λ‹ˆλ‹€.

 1. String μƒμ„±μžλ₯Ό μ‚¬μš©.
 2. Object.prototype.toString λ©”μ„œλ“œ μ‚¬μš©.
 3. λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μž μ‚¬μš©.

// 1. String μƒμ„±μžλ₯Ό μ‚¬μš©.

console.log(String(1)); // '1'
console.log(String(true)); // 'true'


// 2. Object.prototype.toString λ©”μ†Œλ“œ μ‚¬μš©.
console.log((1).toString()); // '1'
console.log((true).toString()); // 'true'

// 3. λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μž μ‚¬μš©.
console.log(1+''); // '1'
console.log(true+''); // 'true'

 

 

🟣 3.2 숫자 νƒ€μž…μœΌλ‘œ λ³€ν™˜

 - 숫자 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 방법은 4가지가 μžˆμŠ΅λ‹ˆλ‹€.

 1. Number μƒμ„±μžλ₯Ό μ‚¬μš©.
 2. parseInt, parseFloat ν•¨μˆ˜ μ‚¬μš©.
 3. 단항 μ—°κ²° μ—°μ‚°μž μ‚¬μš©.
 4. μ‚°μˆ  μ—°μ‚°μž μ‚¬μš©.

// 1. Number μƒμ„±μžλ₯Ό μ‚¬μš©.
console.log(Number('10')); // 10
console.log(Number(true)); // 1
console.log(Number('κ°€λ‚˜λ‹€')); // NaN


// 2. parseInt, parseFloat ν•¨μˆ˜ μ‚¬μš©. (λ¬Έμžμ—΄λ§Œ λ³€ν™˜ κ°€λŠ₯)
console.log(parseInt('10')); // 10
console.log(parseInt(true)); // NaN
console.log(parseInt('κ°€λ‚˜λ‹€')); // NaN

console.log(parseFloat('6.17')); // 6.17
// parseIntλŠ” μ†Œμˆ˜μ  제거됨
console.log(parseInt('6.17')); // 6


// 3. 단항 μ—°κ²° μ—°μ‚°μž μ‚¬μš©.
console.log(+'10'); // 10
console.log(+'6.17'); // 6
console.log(+true); // 1



// 4. μ‚°μˆ  μ—°μ‚°μž μ‚¬μš©.
console.log('-1' * 2); // -2
console.log('20' / 4); // 5
console.log('4' % 3); // 1
console.log(true * 10); // 10

 

 

🟣 3.3 boolean νƒ€μž…μœΌλ‘œ λ³€ν™˜

 - boolean νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 방법은 2가지가 μžˆμŠ΅λ‹ˆλ‹€.

 1. Boolean μƒμ„±μžλ₯Ό μ‚¬μš©.
 2. !λΆ€μ • 논리 μ—°μ‚°μžλ₯Ό μ‚¬μš©.

// 1. Boolean μƒμ„±μžλ₯Ό μ‚¬μš©.
console.log(Boolean(10)); // true
console.log(Boolean('κ°€λ‚˜')); //true
console.log(Boolean(0)); // false
console.log(Boolean(null)); // false
console.log(Boolean({}));        // true
console.log(Boolean([]));        // true


// 2. !λΆ€μ • 논리 μ—°μ‚°μžλ₯Ό μ‚¬μš©.
console.log(!'x'); // false
console.log(!!'x'); // true

console.log(!0); // true
console.log(!!0); // false

console.log(!null); // true
console.log(!!null); // false

 

 

 

πŸ“ μ •λ¦¬ 

  • νƒ€μž… λ³€ν™˜μ—λŠ” λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜κ³Ό 암묡적 νƒ€μž… λ³€ν™˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.
  • κ°œλ°œμžκ°€ 직접 νƒ€μž…μ„ λ³€κ²½ν•˜λŠ” 것을 λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜μ΄λΌ ν•©λ‹ˆλ‹€.
  • μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄μ„œ μžλ™μ μœΌλ‘œ νƒ€μž…μ΄ λ³€κ²½λ˜λŠ” 것을 암묡적 νƒ€μž… λ³€ν™˜μ΄λΌκ³  ν•©λ‹ˆλ‹€.

 

κΈ΄ κΈ€ μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€ :) 
ν‹€λ¦° λ‚΄μš©μ΄ μžˆκ±°λ‚˜, 덧뢙일 λ‚΄μš©μ΄ μžˆλ‹€λ©΄ μ–Έμ œλ“ μ§€ λŒ“κΈ€ λ‹¬μ•„μ£Όμ„Έμš”!
제 글이 μ‘°κΈˆμ΄λ‚˜λ§ˆ μ½μœΌμ‹  λΆ„λ“€μ—κ²Œ 도움이 λ˜λ„λ‘ λ…Έλ ₯ν•˜κ² μŠ΅λ‹ˆλ‹€
λ‹€μŒ νŽΈμ— λ΄¬μš”~

 

728x90
λ°˜μ‘ν˜•