ν•­ν•΄99

Javascript κ°œλ… 정리(1) μžλ£Œν˜•κ³Ό 동적언어

JIN_Coder 2022. 7. 16. 00:59

 πŸ€ JavaScript의 μžλ£Œν˜•κ³Ό JavaScript만의 νŠΉμ„±μ€ λ¬΄μ—‡μΌκΉŒ ?

 

Javascript의 8κ°€μ§€μ˜ μžλ£Œν˜•

 

1. Boolean

 - 논리 μš”μ†Œλ₯Ό λ‚˜νƒ€λƒ„
 - true와 false λ‘ κ°€μ§€μ˜ κ°’

 

2. Null

 - null ν•˜λ‚˜μ˜ κ°’λ§Œ κ°€μ§ˆ 수 있음

 - null을 ‘μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”(nothing)’ κ°’, ‘λΉ„μ–΄ μžˆλŠ”(empty)’ κ°’, ‘μ•Œ 수 μ—†λŠ”(unknown)’ 값을 λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©

 

3. Undefined

 - λ³€μˆ˜ 선은 ν–ˆμœΌλ‚˜ 값을 ν• λ‹Ή ν•˜μ§€ μ•Šμ€ λ³€μˆ˜

 - undefined

 

4. Number

 - μˆ«μžν˜•

 - (-(2^53 − 1)λΆ€ν„° 2^53 − 1κΉŒμ§€μ˜ 수

 - NaN("Not a Number") : 계산 쀑에 μ—λŸ¬κ°€ λ°œμƒν–ˆλ‹€λŠ” 것을 λ‚˜νƒ€λ‚΄μ£ΌλŠ” κ°’, λΆ€μ •ν™•ν•˜κ±°λ‚˜ μ •μ˜λ˜μ§€ μ•Šμ€ μˆ˜ν•™ 연산을 μ‚¬μš© λ‚˜νƒ€λ‚˜λŠ” μ—λŸ¬

 

5. BigInt

 - μˆ«μžν˜•

 - Number의 μ•ˆμ „ ν•œκ³„λ₯Ό λ„˜μ–΄μ„œλŠ” 맀우 큰 μ •μˆ˜λ₯Ό ν‘œν˜„ ν• λ–„ μ‚¬μš©

 - μ •μˆ˜ 끝에 n을 λΆ™μ—¬ ν‘œν˜„ ex) const BigInt = 12345...6789n


6.String

 - λ¬Έμžν˜•(ν…μŠ€νŠΈ 데이터) " " / ' ' / ` ` μ‚¬μš©, ` `은 λ¬Έμžμ—΄ 쀑간에 λ³€μˆ˜λ‚˜ ν‘œν˜„μ‹μ„ ${...} μ•ˆμ— λ„£μ–΄ μ‚¬μš©

 - ν•œκΈ€μžκ°€ ν•˜λ‚˜μ˜ μš”μ†Œ / string의 κΈΈμ΄λŠ” μš”μ†Œμ˜ 수 / string 인덱슀 0은 첫번째 μš”μ†Œ

 - C 언어와 같은 일뢀 ν”„λ‘œκ·Έλž˜λ° 언어와 달리 JavaScript λ¬Έμžμ—΄μ€ λΆˆλ³€


7. Symbol

 - κ³ μœ ν•˜κ³  λ³€κ²½ λΆˆκ°€λŠ₯ν•œ μ›μ‹œ κ°’

 - 객체의 속성 ν‚€λ‘œ μ‚¬μš© κ°€λŠ₯


8. Objeact(객체)

 - 객체λ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€λŠ” μžλ£Œν˜•μ„ ν•œκ°€μ§€λ§Œ ν‘œν˜„ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— μ›μ‹œ μžλ£Œν˜• BUT, κ°μ²΄λŠ” 데이터 μ»¬λ ‰μ…˜μ΄λ‚˜ λ³΅μž‘ν•œ 개체λ₯Ό ν‘œν˜„ν•  수 있음

 - 속성은 'ν‚€' κ°’μœΌλ‘œ μ‹λ³„ν•˜λ©°, ν‚€ κ°’μœΌλ‘œλŠ” λ¬Έμžμ—΄ κ°’μ΄λ‚˜ μ‹¬λ³Όμ„ μ‚¬μš©

속성 κ°’μœΌλ‘œλŠ” λ‹€λ₯Έ 객체λ₯Ό 포함해 λͺ¨λ“  νƒ€μž…μ„ μ‚¬μš©ν•  수 μžˆμœΌλ―€λ‘œ λ³΅μž‘ν•œ 자료ꡬ쑰의 ꡬ좕이 κ°€λŠ₯

 

λŠμŠ¨ν•œ νƒ€μž…(loosely typed)의 동적(dynamic) μ–Έμ–΄


Javascript의 λ³€μˆ˜λŠ” μ–΄λ–€ νŠΉμ • νƒ€μž…κ³Ό μ—°κ²°λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©°, λͺ¨λ“  νƒ€μž…μ˜ κ°’μœΌλ‘œ ν• λ‹Ή 및 μž¬ν• λ‹Ήμ΄ κ°€λŠ₯함
λ™μ νƒ€μž…

let foo = 42 // fooκ°€ 숫자
foo = 'bar' // fooκ°€ 이제 λ¬Έμžμ—΄
foo = true // fooκ°€ 이제 λΆˆλ¦¬μ–Έ

 

JavaScript ν˜•λ³€ν™˜

 

ν•¨μˆ˜μ™€ μ—°μ‚°μžμ— μ „λ‹¬λ˜λŠ” 값은 λŒ€λΆ€λΆ„ μ μ ˆν•œ μžλ£Œν˜•μœΌλ‘œ μžλ™ λ³€ν™˜

 

λ¬Έμžν˜•μ„ μˆ«μžν˜•μœΌλ‘œ λ³€ν™˜ν•˜κΈ°

var λ³€μˆ˜ = parseInt(문자);    //문자λ₯Ό μ •μˆ˜ν˜• 숫자둜 λ³€ν™˜ν•΄μ€Œ

var λ³€μˆ˜ = parseFloat(문자);     //문자λ₯Ό μ‹€μˆ˜ν˜• 숫자둜 λ³€ν™˜ν•΄μ€Œ

var λ³€μˆ˜ = Nember(문자);    //문자λ₯Ό μ •μˆ˜&μ‹€μˆ˜ν˜• 숫자둜 λ³€ν™˜ν•΄μ€Œ

μˆ«μžν˜•μ„ λ¬Έμžν˜•μœΌλ‘œ λ³€ν™˜ν•˜κΈ°

var λ³€μˆ˜ = String(숫자);    //숫자λ₯Ό 문자둜 λ³€ν™˜ν•΄μ€Œ

var λ³€μˆ˜ = 숫자.toString(진법);    //숫자λ₯Ό 문자둜 λ³€ν™˜ν•΄μ€Œ - λ³€ν™˜ν•˜λ©΄μ„œ 진법을 λ°”κΏ€ 수 있음

var λ³€μˆ˜ = 숫자.toFixed(μ†Œμˆ˜μžλ¦¬μˆ˜);    //숫자λ₯Ό 문자둜 λ³€ν™˜ν•΄μ€Œ - μ‹€μˆ˜ν˜•μ˜ μ†Œμˆ˜μ  자리λ₯Ό 지정할 수 있음

var λ³€μˆ˜ = 숫자 + "λ¬Έμžμ—΄";    //μˆ«μžμ™€ λ¬Έμžμ—΄μ„ ν•œ λ¬Έμžμ—΄λ‘œ λ”ν•΄μ€Œ

λΆˆλ¦°ν˜•μœΌλ‘œ λ³€ν™˜ν•˜κΈ°

alert( Boolean(1) ); // 숫자 1(true)
alert( Boolean(0) ); // 숫자 0(false)

alert( Boolean("hello") ); // λ¬Έμžμ—΄(true)
alert( Boolean("") ); // 빈 λ¬Έμžμ—΄(false)

 

 

λŠμŠ¨ν•œ νƒ€μž…(loosely typed)의 동적(dynamic) μ–Έμ–΄μ˜ 문제점과 보완할 수 μžˆλŠ” 방법

 

정적언어

- 컴파일 μ‹œκ°„μ— λ³€μˆ˜μ˜ νƒ€μž…μ΄ κ²°μ •λ˜λŠ” μ–Έμ–΄

 - νƒ€μž… 즉, μžλ£Œν˜•μ„ μ»΄νŒŒμΌμ‹œμ— 결정함

 - C, C++, Java

 - λ³€μˆ˜μ— λ“€μ–΄κ°ˆ κ°’μ˜ ν˜•νƒœμ— 따라 μžλ£Œν˜•μ„ 지정

 - μž₯점

1. 컴파일 μ‹œκ°„μ— λ³€μˆ˜μ˜ νƒ€μž…μ„ μ²΄ν¬ν•˜λ―€λ‘œ μ‚¬μ†Œν•œ 버그듀을 μ‰½κ²Œ 체크 ν•  수 있음

2. 즉, νƒ€μž… μ—λŸ¬λ‘œ μΈν•œ λ¬Έμ œμ μ„ μ΄ˆκΈ°μ— λ°œκ²½ν•  수 μžˆμ–΄ νƒ€μž…μ˜ μ•ˆμ •μ„±μ΄ 올라감

단점

1. μžλ£Œν˜•μ— λ§žμ§€ μ•ŠλŠ” 값이 λ“€μ–΄κ°€λ©΄ 컴파일 μ—λŸ¬ λ°œμƒ

 

동적언어

 - λŸ°νƒ€μž„μ— νƒ€μž…μ΄ κ²°μ •λ˜λŠ” μ–Έμ–΄

 - 즉, μ†ŒμŠ€κ°€ λΉŒλ“œλ  λ•Œ μžλ£Œν˜•μ„ κ²°μ •ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ‹€ν–‰ μ‹œ 결정됨

 - Javascript, Ruby, Python

μž₯점

1. 맀번 νƒ€μž…μ„ 써쀄 ν•„μš”κ°€ μ—†μ–΄ λΉ λ₯΄κ²Œ μž‘μ„± κ°€λŠ₯

2. λŸ°νƒ€μž„μ‹œ νƒ€μž…μ΄ κ²°μ •λ˜κΈ° λ•Œλ¬Έμ— μœ μ—°μ„±μ΄ λ†’μŒ

 - 단점

1. μ‹€ν–‰ 도쀑에 λ³€μˆ˜μ— μ˜ˆμƒμΉ˜ λͺ»ν•œ νƒ€μž…μ΄ 듀어와 type Errorκ°€ λ°œμƒ ν•  수 있음

 - 보완 : μ½”λ“œ μž‘μ„± 및 μ‹€ν–‰μ‹œ νƒ€μž…μ˜ μžλ£Œν˜•μ„ 잘 확인

 

 

undefined와 null의 λ―Έμ„Έν•œ 차이

 

곡톡점

 - λ‘˜λ‹€ 각각의 νƒ€μž…λͺ…(undefined, null)의 값이 μœ μΌν•¨

 

undefined

 - undefinedλŠ” ‘아무 값도 할당받지 μ•Šμ€ μƒνƒœ’λ₯Ό 의미

 - λ³€μˆ˜λ₯Ό μ„ μ–Έν•œ 이후 값을 ν• λ‹Ήν•˜μ§€ μ•Šμ€ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λ©΄ undefinedκ°€ λ°˜ν™˜

 - λ³€μˆ˜λ₯Ό μ°Έμ‘°ν–ˆμ„ λ•Œ undefinedκ°€ λ°˜ν™˜λœλ‹€λ©΄ μ„ μ–Έ 이후 값이 ν• λ‹Ήλ˜μ§€ μ•Šμ€ 즉, μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ λ³€μˆ˜λΌλŠ” 것을 μ•Œ 수 있음

 

null

 - ‘λΉ„μ–΄μžˆλŠ”, μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” κ°’'(κ°’μ˜ λΆ€μž¬)을 의미

 - μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜λ―€λ‘œ null은 Null, NULL λ“±κ³ΌλŠ” 닀름

 - null은 λ³€μˆ˜μ— 값이 μ—†λ‹€λŠ” 것을 μ˜λ„μ μœΌλ‘œ λͺ…μ‹œ(μ˜λ„μ  λΆ€μž¬)ν•  λ•Œ μ‚¬μš©

 - λ³€μˆ˜μ— null을 ν• λ‹Ήν•˜λŠ” 것은 λ³€μˆ˜κ°€ 이전에 μ°Έμ‘°ν•˜λ˜ 값을 더 이상 μ°Έμ‘°ν•˜μ§€ μ•Šκ² λ‹€λŠ” 의미

 - 이전에 ν• λ‹Ήλ˜μ–΄ 있던 값에 λŒ€ν•œ μ°Έμ‘°λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ œκ±°ν•˜λŠ” 것을 의미

 

 λ³€μˆ˜μ— 값이 μ—†λ‹€λŠ” 것을 λͺ…μ‹œν•˜κ³  싢을 λ•ŒλŠ” undefinedλ₯Ό ν• λ‹Ήν•˜λŠ” 것이 μ•„λ‹ˆλΌ null을 ν• λ‹Ή

 

 

 

https://jin-coder.tistory.com/37

 

Javascript κ°œλ… 정리(2) - 객체와 λΆˆλ³€μ„±

🐀 JavaScript 객체와 λΆˆλ³€μ„±μ΄λž€ ? κΈ°λ³Έν˜• 데이터와 μ°Έμ‘°ν˜• 데이터 κΈ°λ³Έν˜•(μ›μ‹œν˜•) 데이터(Primative Type) 객체가 μ•„λ‹Œ 데이터 μœ ν˜• 6가지  - Number  - String  - Boolean  - null  - undefined  - Symb..

jin-coder.tistory.com

https://jin-coder.tistory.com/38

 

Javascript κ°œλ… 정리(3) - ν˜Έμ΄μŠ€νŒ…κ³Ό TDZ

🐀 ν˜Έμ΄μŠ€νŒ…κ³Ό TDZλŠ” λ¬΄μ—‡μΌκΉŒ ? ν˜Έμ΄μŠ€νŒ… ν˜Έμ΄μŠ€νŒ…μ΄λž€, λ³€μˆ˜μ™€ ν•¨μˆ˜μ˜ λ©”λͺ¨λ¦¬ 곡간을 μ„ μ–Έ 전에 미리 ν• λ‹Ήν•΄λ‘λŠ”κ²ƒ λ³€μˆ˜,ν•¨μˆ˜μ˜ μ„ μ–ΈλΆ€κ°€ μœ„μΉ˜ν•œ 인접 μŠ€μ½”ν”„μ˜ μ‹œμž‘ μ§€μ μ—μ„œ ν•΄λ‹Ή μ‹λ³„μžμ˜

jin-coder.tistory.com