πŸ€·β€β™€οΈJavascript의 ν˜•λ³€ν™˜(Type Casting)

κΉ€μž¬μš°Β·2022λ…„ 9μ›” 23일
0

μžλ°”μŠ€ν¬λ¦½νŠΈ Basic

λͺ©λ‘ 보기
2/3
post-thumbnail

Basic javascript 1-2

javascript의 ν˜• λ³€ν™˜μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž!

ν˜•λ³€ν™˜μ—λŠ” λ‹€μŒκ³Ό 같이 두가지가 μžˆμŠ΅λ‹ˆλ‹€.

  1. μ•”μ‹œμ  λ³€ν™˜(Explicit)
  2. λͺ…μ‹œμ  λ³€ν™˜(Implicit)

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” νƒ€μž…μ΄ 맀우 μœ μ—°ν•œ μ–Έμ–΄λΌμ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 ν•„μš”μ— 따라 μ•”μ‹œμ λ³€ν™˜μ„ ν˜Ήμ€ 개발자의 μ˜λ„μ— 따라 λͺ…μ‹œμ  λ³€ν™˜μ„ μ‹€ν–‰ν•˜λŠ”λ°!
μ•”μ‹œμ  ν˜• λ³€ν™˜(Implicit type conversion)
μ•”μ‹œμ  λ³€ν™˜μ΄λž€ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 ν•„μš”μ— 따라 μžλ™μœΌλ‘œ 데이터 νƒ€μž…μ„ λ³€ν™˜μ‹œν‚€λŠ” κ²ƒμž…λ‹ˆλ‹€.
μ‚°μˆ  μ—°μ‚°μž, 동등비ꡐ
1.μ‚°μˆ  μ—°μ‚°μž
'+' μ—°μ‚°μžλŠ” μˆ«μžλ³΄λ‹€ λ¬Έμžμ—΄μ΄ μš°μ„ μ‹œ 되기 λ•Œλ¬Έμ—, μˆ«μžν˜•μ΄ λ¬Έμžν˜•μ„ λ§Œλ‚˜λ©΄ λ¬Έμžν˜•μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ μ—°μ‚° λ©λ‹ˆλ‹€!

number + string  // string //μˆ«μžμ™€ λ¬Έμžκ°€ λ§Œλ‚˜ 문자둜 μ—°μ‚°!
string + string  // string //문자 + 문자 = 문자
number + number  // number //숫자 + 숫자 = 숫자
 
// λ”ν•˜κΈ° μ™Έ ( *, /, -, % ) λ‹€λ₯Έ μ—°μ‚°μžλŠ” μˆ«μžν˜•μ΄ λ¬Έμžν˜• 보닀 μš°μ„ μ‹œ 됨!
string * number  // number //문자 * 숫자 = 숫자
string * string  // number //문자 * 문자 = 숫자
number * number  // number //숫자 * 숫자 = 숫자

μ•„~ μ‚°μˆ μ—°μ‚°μžλŠ” λ¬Έμžμ—΄ μš°μ„ μ΄κ³ , λ‹€λ₯Έ μ—°μ‚°μžλ“€μ€ μˆ«μžκ°€ μš°μ„ μ΄κ΅¬λ‚˜!
잠깐?πŸ€·β€β™‚οΈstring은 μ™œ number κ°’μœΌλ‘œ λ°›μ•„μ˜€μ§€?
κ·Έ μ΄μœ λŠ” λ°”λ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈ μ•”μ‹œμ  ν˜•λ³€ν™˜μœΌλ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈ μžμ²΄μ—μ„œ
μ™œ λ¬Έμžλž‘ 문자λ₯Ό κ³±ν•΄? λ¬Έμžλž‘ 문자λ₯Ό μ™œ λ‚˜λˆ ? 말도 μ•ˆλ˜κΈ° λ•Œλ¬Έμ— μžλ°”μŠ€ν¬λ¦½νŠΈ μžμ²΄μ—μ„œ
λ„ˆ 이거 잘λͺ» μž…λ ₯ν•œκ±° 같은데? ν•˜λ©΄μ„œ 문자λ₯Ό number둜 μΈμ‹ν•˜λŠ”κ±°λ‹€!
λ™μΉ˜ 비ꡐ
μ•„λž˜ μ˜ˆμ œλŠ” μ—„κ²©ν•˜μ§€ μ•Šμ€ λ™μΉ˜(==)비ꡐ이며, μ•„λž˜μ˜ 결과값은 μ’Œμš°ν•­ λ³€ν™˜ν•  경우 λͺ¨λ‘ '0==0이기 λ•Œλ¬Έμ—' 'true'이닀.

true == 1;    // trueλŠ” 1둜 λ³€ν™˜
false == 0;   // falseλŠ” 0으둜 λ³€ν™˜
'1' == true;  // '1'은 true둜 λ³€ν™˜
'1' == 1;     // '1'은 1둜 λ³€ν™˜
null == undefined // true 0 == 0
β€œ0” == 0 // true 0 == 0
0 == false // true 0 == 0
β€œ0” == false // true 0 == 0

두 값을 λΉ„κ΅ν• λ•Œ λ°μ΄ν„°νƒ€μž…μ„ λ³€ν™˜ν•˜μ§€ μ•ŠλŠ” μ—„κ²©ν•œ λ™μΉ˜(===)비ꡐ와 ν˜Όλ™λ˜μ§€ μ•Šλ„λ‘ ν•œλ‹€.
잠깐?πŸ˜’ μ—„κ²©ν•˜μ§€ μ•Šμ€ λ™μΉ˜λŠ” 뭐고,,, μ—„κ²©ν•œ λ™μΉ˜λŠ” 뭐야 .. ?

κ·Έλž˜μ„œ μ•Œμ•„λ³Έ κ²°κ³Ό
Equal Operator ==
μ„œλ‘œ νƒ€μž…μ΄ λ‹€λ₯΄λ©΄ 같은 νƒ€μž…μœΌλ‘œ λ³€ν™˜μ„ ν•΄μ„œ 비ꡐλ₯Ό ν•œλ‹€.
Strict Equal Operator ===
μ„œλ‘œ νƒ€μž…μ΄ 달라도 νƒ€μž… λ³€ν™˜ 없이 μ—„κ²©ν•˜κ²Œ 비ꡐλ₯Ό ν•œλ‹€κ³  ν•œλ‹€
πŸ‘€μ˜ˆλ₯Ό λ“€μ–΄λ³ΌκΉŒμš” ?!

==μ—°μ‚°μž
10 == 10 // true
10 == '10' // true
true == 1 // true
true == '1' // true
true == 'true' // false
null == undefined // true

===μ—°μ‚°μž

10 === 10 // true
10 === '10' // false
true === 1 // false
true === 'true' // false
null === undefined // false
NaN === NaN // false

μ•„.. == μ—°μ‚°μžλŠ” type이 달라도 type을 λ³€ν™˜ ν›„ 값을 좜λ ₯ ν•΄μ£Όκ³ ,
=== μ—°μ‚°μž νŠΉμ§•μ€ type λ‹€λ₯΄λ©΄ false λ₯Ό λ°˜ν™˜ ν•˜λŠ”κ΅¬λ‚˜.
μΆ”κ°€λ‘œ ===μ—°μ‚°μž νŠΉμ§•μ—
NaN 값은 자기 μžμ‹ μ„ ν¬ν•¨ν•˜μ—¬ μ–΄λ– ν•œ 값과도 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ”κ΅¬λ‚˜..
즉 μ—°μ‚°μžμ— NaN 값이 μ‘΄μž¬ν•˜λŠ” 경우 항상 false κ΅¬λ‚˜!

λͺ…μ‹œμ λ³€ν™˜
λͺ…μ‹œμ λ³€ν™˜μ΄λž€ κ°œλ°œμžκ°€ μ˜λ„λ₯Ό 가지고 λ°μ΄ν„°νƒ€μž…μ„ λ³€ν™˜μ‹œν‚€λŠ” 것이닀.
νƒ€μž…μ„ λ³€κ²½ν•˜λŠ” 기본적인 방법은 Object(), Number(), String(), Boolean() 와 같은 ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜λŠ”λ° new μ—°μ‚°μžκ°€ μ—†λ‹€λ©΄ μ‚¬μš©ν•œ ν•¨μˆ˜λŠ” νƒ€μž…μ„ λ³€ν™˜ν•˜λŠ” ν•¨μˆ˜λ‘œμ¨ μ‚¬μš©λœλ‹€.

var trans = 100; //Number
Object(trans); //100
console.log(typeof trans); //Number
String(trans); //”100"
console.log(typeof trans); //String
Boolean(trans); //true
console.log(typeof trans); //Bolean

ν•˜λ‚˜μ˜ Type 을 Number Type 으둜 λ³€ν˜• μ‹œν‚€λŠ” 방법이 μžˆλ‹€!
Number()

Number()λŠ” μ •μˆ˜ν˜•κ³Ό μ‹€μˆ˜ν˜•μ˜ 숫자둜 λ³€ν™˜ν•œλ‹€.

Number(β€œ12345”); //12345
Number(β€œ2”*2); //4

ParseInt()

parseInt()λŠ” μ •μˆ˜ν˜•μ˜ 숫자둜 λ³€ν™˜ν•œλ‹€.
πŸ€·β€β™‚οΈIF
λ¬Έμžμ—΄μ΄ '숫자0'으둜 μ‹œμž‘ν•˜λ©΄ 8μ§„μˆ˜λ‘œ μΈμ‹ν•œλ‹€.
μ•„ λ‚΄κ°€.. 이 μ‚¬μ‹€λ§Œ μ•Œκ³  μžˆμ—ˆμœΌλ©΄
const num = 01234;
console.log(num);
answer= 668 μ΄λΌλŠ”κ²ƒμ„ λ΄€μ„λ•Œ 이게 μ™œ? μ΄λŸ¬μ§€ μ•Šμ•˜μ„ν…λ° μ§„μ§œ μ€‘μš”ν•œ 정보닀!
그리고 '0x,0X'둜 μ‹œμž‘ν•œλ‹€λ©΄ ν•΄λ‹Ή λ¬Έμžμ—΄μ„ 16μ§„μˆ˜ 숫자둜 μΈμ‹ν•œλ‹€.
λ˜ν•œ μ•ž λΆ€λΆ„ 빈 곡백을 두고 λ‚˜μ˜€λŠ” λ¬ΈμžλŠ” λͺ¨λ‘ λ¬΄μ‹œλ˜μ–΄μ„œ NaN값을 λ°˜ν™˜ν•œλ‹€κ³  ν•œλ‹€.

parseFloat()
parseFloat()λŠ” 뢀동 μ†Œμˆ˜μ μ˜ 숫자둜 λ³€ν™˜ν•œλ‹€. parseInt()μ™€λŠ” 달리 parseFloat()λŠ” 항상 10μ§„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©° parseFloat() λ˜ν•œ μ•žλΆ€λΆ„ 빈 곡백을 두고 λ‚˜μ˜€λŠ” λ¬ΈμžλŠ” λͺ¨λ‘ λ¬΄μ‹œλ˜μ–΄ NaN을 λ°˜ν™˜ν•œλ‹€.

parseFloat(β€œ!123”); //NaN λ¬΄μ‹œλ˜μ–΄μ„œ ν•΄λ‹Ή κ°’ 좜λ ₯
parseFloat(β€œ123.123456”); //123.123456
parseInt(β€œ123.123456”); //123
parseFloat(β€œ 123.123456”); //123.123456
parseFloat(β€œ a123.123456”); //NaN λ¬΄μ‹œλ˜μ–΄μ„œ ν•΄λ‹Ή κ°’ 좜λ ₯

μ΄λ²ˆμ—” String Type으둜 λ°”κΎΈλŠ” 방법을 κ³΅λΆ€ν•΄λ³΄μž!

String()

String(123) // '123'
String(-12.3) // '-12.3'
String(null) // 'null'
String(undefined) // 'undefined'
String(true) // 'true'
String(false) // 'false'

무쑰건 ''κ°’μœΌλ‘œ 좜λ ₯이 λœλ‹€!

toString()
toString()λŠ” 인자둜 기수λ₯Ό 선택할 수 μžˆλ‹€. 인자λ₯Ό μ „λ‹¬ν•˜μ§€ μ•ŠμœΌλ©΄ 10μ§„μˆ˜λ‘œ λ³€ν™˜ν•œλ‹€.

var trans = 100;
trans.toString(); //”100"
trans.toString(2); //”1100100"
trans.toString(8); //”144"
var boolT = true;
var boolF = false;
boolT.toString(); //”true”
boolF.toString(); //”false”

였.. toString()에닀가 ()에닀가 μ§„μˆ˜κ°’μ„ μ£Όλ©΄ ν•΄λ‹Ή μ§„μˆ˜ κ°’μœΌλ‘œ 값이 ν‘œν˜„ λ˜λŠ”κ΅¬λ‚˜!
μ „λ‹¬ν•˜μ§€ μ•ŠμœΌλ©΄ 10μ§„μˆ˜λ‘œ λ³€ν™˜ν•œλ‹€ λ©”λͺ¨πŸ˜‰

toFixed()
toFixed()의 인자λ₯Ό λ„£μœΌλ©΄ μΈμžκ°’λ§ŒνΌ λ°˜μ˜¬λ¦Όν•˜μ—¬ μ†Œμˆ˜μ μ„ ν‘œν˜„ν•˜λ©° μ†Œμˆ˜μ μ„ λ„˜μΉ˜λŠ” 값이 인자둜 λ“€μ–΄μ˜€λ©΄ 0으둜 길이λ₯Ό 맞좘 λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•œλ‹€.

var trans = 123.456789;
var roundOff = 99.987654;
trans.toFixed(); //”123"
trans.toFixed(0); //”123"
trans.toFixed(2); //”123.46"
trans.toFixed(8); //”123.45678900"
roundOff.toFixed(2); //”99.99"
roundOff.toFixed(0); //”100"

μ†Œμˆ˜μ λ§ŒνΌ κ°€μ„œ λ°˜μ˜¬λ¦Όμ„ ν•˜λŠ”κ΅¬λ‚˜ .. 123.456789; μ†Œμˆ˜μ μ΄ 6자리 밖에 μ—†μ–΄μ„œ 8μžλ¦¬λŠ” 0으둜 λŒ€μ²΄ν•˜λŠ”κ΅¬λ‚˜ 이해 μ™„λ£Œ!

λ“œλ””μ–΄ λ§ˆμ§€λ§‰ λ³€ν™˜μΈ Boolean이닀!
true와 false둜 λ‚˜λˆ μ§€λŠ”
Boolean()

Boolean('') // false
Boolean(0) // false
Boolean(-0) // false
Boolean(NaN) // false
Boolean(null) // false
Boolean(undefined) // false
Boolean(false) // false

0 = false
NaN = false
null = false
undefined = false
false = false
였호 ... λ°˜λŒ€λ‘œ true인 κ²½μš°λ„ 봐야겠닀!

Boolean({}) // true
Boolean([]) // true
Boolean(Symbol()) // true
!!Symbol() // true
Boolean(function() {}) // true

λͺ©λ‘μ— μ—†λŠ” 값은 true개체, ν•¨μˆ˜, Array, Date, μ‚¬μš©μž μ •μ˜ μœ ν˜• 등을 ν¬ν•¨ν•˜μ—¬ 둜 λ³€ν™˜λœλ‹€κ³  ν•œλ‹€.
true λ³΄λ‹€λŠ” false 의 값을 κΈ°μ–΅ν•˜κ³  있으면 μ΄ν•΄ν•˜κΈ° 더 μ‰½κ² λ‹€πŸ˜‰πŸ˜‰

<좜처 자료>
https://developer92.tistory.com/11
https://medium.com/gdana/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%ED%98%95%EB%B3%80%ED%99%98%EC%9D%80-%EB%91%90%EA%B0%80%EC%A7%80%EB%8B%A4-b46875be4a88
https://www.devkuma.com/docs/javascript/%ED%98%95-%EB%B3%80%ED%99%98-type-conversion/
https://www.freecodecamp.org/news/js-type-coercion-explained-27ba3d9a2839/
좜처: https://developer-talk.tistory.com/184 [ν‰λ²”ν•œ 직μž₯인의 곡뢀 정리:ν‹°μŠ€ν† λ¦¬]
https://velog.io/@yunsungyang-omc/JS-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%ED%98%95%EB%B3%80%ED%99%98Type-Casting

profile
ν”„λ‘ νŠΈμ—”λ“œ κΎΈμ€€κ°œλ°œμžμž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€