🐸 [JavaScript] μ—°μ‚°μž

hnyoojinΒ·2024λ…„ 8μ›” 26일

🐸 JS λ§ˆμŠ€ν„° 되기

λͺ©λ‘ 보기
6/19
post-thumbnail

JavaScript의 μ—°μ‚°μžμ— λŒ€ν•΄ μ•Œμ•„λ³΄μž.


μ—°μ‚°μž

μš°μ„  μ—°μ‚°μž operator의 μ •μ˜λ₯Ό μ•Œμ•„λ³΄μž.


ν•˜λ‚˜ μ΄μƒμ˜ ν‘œν˜„μ‹μ„ λŒ€μƒμœΌλ‘œ,
μ‚°μˆ , ν• λ‹Ή, 비ꡐ, 논리, νƒ€μž…, μ§€μˆ˜ μ—°μ‚° 등을 μˆ˜ν–‰ν•΄μ„œ,
ν•˜λ‚˜μ˜ 값을 λ§Œλ“œλŠ” 것이닀.

μ—°μ‚°μ˜ λŒ€μƒμ˜ λ˜λŠ” 것을 ν”Όμ—°μ‚°μžλΌκ³  ν•˜λŠ”λ°, 이 ν”Όμ—°μ‚°μžλŠ” ν‘œν˜„μ‹μ΄μ–΄μ•Ό ν•œλ‹€.

κ·ΈλŸ¬λ‹ˆκΉŒ, κ°’μœΌλ‘œ 평가될 수 μžˆμ–΄μ•Όλ§Œ ν•œλ‹€λŠ” λœ»μ΄λ‹€.

μ—°μ‚°μžμ˜ μ’…λ₯˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž.


1. μ‚°μˆ μ—°μ‚°μž arithmetic operator

ν”Όμ—°μ‚°μžλ₯Ό λŒ€μƒμœΌλ‘œ μˆ˜ν•™μ  계산 을 μˆ˜ν–‰ν•΄μ„œ, μƒˆλ‘œμš΄ μˆ«μžκ°’μ„ λ§Œλ“œλŠ” μ—°μ‚°μžμ΄λ‹€.

μ‚°μˆ  연산이 λΆˆκ°€λŠ₯ν•œ κ²½μš°μ—λŠ”, NaN μ΄λΌλŠ” 값을 λ°˜ν™˜ν•œλ‹€.

ν”Όμ—°μ‚°μžμ˜ κ°œμˆ˜μ— 따라, μ‚°μˆ  μ—°μ‚°μžμ˜ μ’…λ₯˜λŠ” λ‘κ°€μ§€λ‘œ λ‚˜λ‰œλ‹€.

이항 μ‚°μˆ  μ—°μ‚°μž binary

+, -, *, /, %

ν”Όμ—°μ‚°μžκ°€ 2개인 μ—°μ‚°μžμ΄λ‹€.
μ–΄λ–€ μ‚°μˆ  연산을 ν•˜λ”λΌλ„, ν”Όμ—°μ‚°μžμ˜ 값이 λ°”λ€ŒλŠ” 경우(side effect)λŠ” μ—†λ‹€.

단항 μ‚°μˆ  μ—°μ‚°μž unary

++, --, +, -

ν”Όμ—°μ‚°μžκ°€ ν•˜λ‚˜μΈ μ—°μ‚°μžμ΄λ‹€.
μ¦κ°μ—°μ‚°μžμΈ ++, --의 경우, λΆ€μˆ˜νš¨κ³Όκ°€ μ‘΄μž¬ν•œλ‹€.

+, -λŠ”, λ§μ…ˆ λΊ„μ…ˆμ΄ μ•„λ‹ˆλ‹€.

μˆ«μžνƒ€μž…μ΄ μ•„λ‹Œ ν”Όμ—°μ‚°μžμ— +λ₯Ό μ‚¬μš©ν•˜λ©΄, ν”Όμ—°μ‚°μžλ₯Ό μˆ«μžνƒ€μž…μœΌλ‘œ λ³€ν™˜ν•œ 값을 생성해 λ°˜ν™˜ν•œλ‹€.
λ§ˆμ°¬κ°€μ§€λ‘œ -λ₯Ό μ‚¬μš©ν•˜λ©΄, ν”Όμ—°μ‚°μžλ₯Ό μˆ«μžνƒ€μž…μœΌλ‘œ λ³€ν™˜ν•΄ λΆ€ν˜Έλ₯Ό λ°˜μ „ν•œ 값을 생성해 λ°˜ν™˜ν•œλ‹€.


이항 μ‚°μˆ  μ—°μ‚°μžμ˜ +λŠ”, ν”Όμ—°μ‚°μž 쀑 ν•˜λ‚˜ 이상이 λ¬Έμžμ—΄μΈ 경우, λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μžλ‘œ λ™μž‘ν•œλ‹€.

μ£Όμ˜ν•  점은, 1 + true 의 경우,
JavaScript 엔진이 trueλ₯Ό μˆ«μžνƒ€μž…μΈ 1둜 κ°•μ œ νƒ€μž… λ³€ν™˜μ„ ν•œ 후에 연산을 μˆ˜ν–‰ν•œλ‹€.

이처럼 κ°œλ°œμžκ°€ μ˜λ„μΉ˜ μ•Šμ•˜μ§€λ§Œ νƒ€μž…μ΄ λ³€ν™˜λ˜λŠ” 것을 암묡적 νƒ€μž…λ³€ν™˜(implicit coercion)이라고 ν•œλ‹€.


2. ν• λ‹Ή μ—°μ‚°μž assignment operator

μš°ν•­μ— μžˆλŠ” ν”Όμ—°μ‚°μžμ˜ 평가 κ²°κ³Όλ₯Ό, μ’Œν•­μ— μžˆλŠ” λ³€μˆ˜μ— ν• λ‹Ήν•˜λŠ” μ—°μ‚°μžμ΄λ‹€.

λ³€μˆ˜μ— 값을 λŒ€μž…ν•˜κΈ° λ•Œλ¬Έμ—, λ‹Ήμ—°νžˆ λ³€μˆ˜μ˜ 값이 λ³€ν•˜λŠ” side effect κ°€ μΌμ–΄λ‚œλ‹€.

=, +=, -=, *=, /=, %=


할당문은, κ°’μœΌλ‘œ ν‘œν˜„λ˜λŠ” ν‘œν˜„μ‹μΈ 문이라고 μ •λ¦¬ν•œ λ°” μžˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν• λ‹Ήλ¬Έ 자체λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.


3. 비ꡐ μ—°μ‚°μž comparison operator

μ’Œν•­κ³Ό μš°ν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό λΉ„κ΅ν•œ λ‹€μŒ, κ·Έ κ²°κ³Όλ₯Ό boolean νƒ€μž…μ˜ κ°’μœΌλ‘œ λ°˜ν™˜ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€.

3-1. 동등/일치 비ꡐ μ—°μ‚°μž

==, ===, !=, !==

if, forλ¬Έ 같은 μ œμ–΄λ¬Έμ˜ μ‘°κ±΄μ‹μ—μ„œ 주둜 μ‚¬μš©ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€.


μ—¬κΈ°μ„œ μ£Όμ˜ν•  점은 ==, ===의 μ‚¬μš©μ΄λ‹€.

λ‘˜μ˜ 차이가 이해가 μ•ˆλ  수 μžˆλ‹€.

κ°„λ‹¨ν•œ κ°œλ…μœΌλ‘œ μ •λ¦¬ν•˜μžλ©΄, λ‘˜μ€ λΉ„κ΅μ˜ 엄격성에 μžˆμ–΄μ„œ 차이가 μžˆλ‹€.


== 의 경우, JavaScript 엔진에 μ˜ν•΄ 암묡적 νƒ€μž… λ³€ν™˜μ΄ μΌμ–΄λ‚˜μ„œ, ν”Όμ—°μ‚°μžμ˜ νƒ€μž…μ„ μΌμΉ˜μ‹œν‚¨ 후에 κ°’λ§Œμ„ λΉ„κ΅ν•œλ‹€.

반면 === 의 경우, ν”Όμ—°μ‚°μžμ˜ κ°’ 뿐만 μ•„λ‹ˆλΌ νƒ€μž…κΉŒμ§€ μΌμΉ˜ν•΄μ•Ό trueκ°€ λ°˜ν™˜λœλ‹€.

== λŠ”, trueκ°€ λ‚˜μ™€λ„, λ™μΌν•˜μ§€ μ•Šμ„ κ°€λŠ₯성이 μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ—, ==λ³΄λ‹€λŠ” ===을 μ‚¬μš©ν•˜λ„λ‘ ν•˜μž.


그리고 또 μ£Όμ˜ν•  점이 μžˆλ‹€.

NaN === NaN 은 μ–΄λ–€ 값이 λ‚˜μ˜¬κΉŒ?
λˆ„κ°€ 봐도 trueκ°€ λ‚˜μ˜¬ 것 κ°™μ§€λ§Œ, κ²°κ³ΌλŠ” false이닀.

κ·Έλž˜μ„œ 결과의 값이 NaN인지 ν™•μΈν•˜λ €λ©΄,
=== μ—°μ‚°μžκ°€ μ•„λ‹Œ, 빌트인 ν•¨μˆ˜ Number.isNaN 을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€κ³  ν•œλ‹€.


λ˜ν•œ, JavaScriptμ—λŠ” -0κ³Ό +0이 λ³„λ„λ‘œ μ‘΄μž¬ν•œλ‹€.
그런데, 이 두 값을 === μ—°μ‚°μžλ‘œ λΉ„κ΅ν•˜λ©΄ trueκ°€ λ‚˜μ˜¨λ‹€.

ES6의 Object.is λ©”μ„œλ“œμ—μ„œλŠ”, μ •ν™•ν•œ 비ꡐ κ²°κ³Όλ₯Ό μ œκ³΅ν•œλ‹€κ³  ν•˜λ‹ˆ, ν•΄λ‹Ή 연산을 μ§„ν–‰ν•  λ•ŒλŠ” Object.is λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ„λ‘ ν•˜μž.


3-2. λŒ€μ†Œ 관계 비ꡐ μ—°μ‚°μž

<, >, <=, >=

ν”Όμ—°μ‚°μžμ˜ 크기λ₯Ό 비ꡐ해 boolean 값을 λ°˜ν™˜ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€.


4. μ‚Όν•­ 쑰건 μ—°μ‚°μž trenary operator

JavaScriptμ—μ„œ, μ‚Όν•­ 쑰건 μ—°μ‚°μžλŠ” λ”± ν•˜λ‚˜λΏμ΄λ‹€.

μ‘°κ±΄μ‹μ˜ 평가 결과에 따라 λ°˜ν™˜ν•  값을 κ²°μ •ν•˜λŠ” μ—°μ‚°μžμ΄λ©°, side effectλŠ” μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€.

(쑰건식) ? (trueμ‹œ λ°˜ν™˜ν•  κ²°κ³Ό) : (falseμ‹œ λ°˜ν™˜ν•  κ²°κ³Ό)

μ‘°κ±΄μ‹μ˜ κ²°κ³ΌλŠ” boolean으둜 ν‰κ°€ν•˜λ©°, boolean이 μ•„λ‹Œ νƒ€μž…μœΌλ‘œ 평가될 경우 암묡적 νƒ€μž… λ³€ν™˜μ΄ μΌμ–΄λ‚œλ‹€.

이런 μ—°μ‚°μžλŠ” if...else 문으둜 λŒ€μ²΄ν•  수 μžˆλ‹€κ³  μƒκ°λœλ‹€.

κ·ΈλŸ¬λ‚˜ if...else λ¬Έκ³ΌλŠ” λ‹€λ₯΄κ²Œ, κ·Έ κ²°κ³Όλ₯Ό κ°’μ²˜λŸΌ μ‚¬μš©ν•  수 μžˆλ‹€.

κ·ΈλŸ¬λ‹ˆκΉŒ μ‚Όν•­ 쑰건 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ©΄, ν‘œν˜„μ‹μΈ 문이 λ˜λŠ” 것이닀.

μ΄λŠ” λ‹€λ₯Έ ν‘œν˜„μ‹μ˜ 일뢀가 될 수 있기 λ•Œλ¬Έμ— 맀우 μœ μš©ν•˜λ‹€.


κ·ΈλŸ¬λ‚˜ μ—¬λŸ¬ 쑰건을 걸쳐 그에 λ”°λ₯Έ 결둠을 λ‚΄λ €μ•Ό ν•˜λŠ” κ²½μš°μ—λŠ” if...else 문을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.


5. λ…Όλ¦¬μ—°μ‚°μž logical operator

||, &&, !

μš°ν•­κ³Ό μ’Œν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό λ…Όλ¦¬μ—°μ‚°ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€.


논리 λΆ€μ • μ—°μ‚°μž `!` λŠ”, μ–Έμ œλ‚˜ boolean νƒ€μž…μ˜ 값을 λ³€ν™˜ν•œλ‹€.

논리합, 논리곱 μ—°μ‚°μžμ˜ ν‘œν˜„μ‹μ˜ 평가 κ²°κ³ΌλŠ” boolean 값이 아닐 μˆ˜λ„ μžˆλ‹€.


6. μ‰Όν‘œ μ—°μ‚°μž

,

μ™Όμͺ½ ν”Όμ—°μ‚°μžλΆ€ν„° μ°¨λ‘€λ‘œ ν”Όμ—°μ‚°μžλ₯Ό ν‰κ°€ν•˜κ³ , λ§ˆμ§€λ§‰ ν”Όμ—°μ‚°μžμ˜ 평가가 μ’…λ£Œλ˜λ©΄, λ§ˆμ§€λ§‰ ν”Όμ—°μ‚°μžμ˜ 평가 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€.

7. κ·Έλ£Ήμ—°μ‚°μž

()

() 둜 ν”Όμ—°μ‚°μžλ₯Ό κ°μ‹ΈλŠ” μ—°μ‚°μž.
μžμ‹ μ˜ ν”Όμ—°μ‚°μžμΈ ν‘œν˜„μ‹μ„ κ°€μž₯ λ¨Όμ € ν‰κ°€ν•œλ‹€.

-> μ—°μ‚°μž μš°μ„ μˆœμœ„λ₯Ό μ‘°μ ˆν•  수 μžˆλ‹€.

κ·ΈλŸ¬λ‹ˆκΉŒ ν•œλ§ˆλ””λ‘œ, μš°λ¦¬κ°€ μˆ˜ν•™μ—μ„œ κ°€μž₯ λ¨Όμ € 계산해야 ν•˜λŠ” 식을 ()둜 κ°μ‹ΈλŠ” 것과 λ™μΌν•œ 역할을 ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€.

8. typeof μ—°μ‚°μž

ν”Όμ—°μ‚°μžμ˜ data type을 λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€.

string, number, boolean, undefined, symbol, object, function μ΄λ ‡κ²Œ 7개의 data type을 λ°˜ν™˜ν•˜λŠ”λ°, μ •ν™•ν•˜κ²Œ μΌμΉ˜ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.


null을 λ°˜ν™˜ν•˜λŠ” κ²½μš°λŠ” μ—†μœΌλ©°, null을 typeof μ—°μ‚°μžλ‘œ 연산해보면 objectκ°€ λ°˜ν™˜λœλ‹€.

이건 JavaScript의 ν•΄κ²°λ˜μ§€ μ•Šμ€ 버그라고 ν•œλ‹€.

null νƒ€μž… 검사λ₯Ό ν•˜λ €λ©΄, typeof μ—°μ‚°μžκ°€ μ•„λ‹Œ ===μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μž.


그리고 μ„ μ–Έν•˜μ§€ μ•Šμ€ μ‹λ³„μžλ₯Ό typeof둜 μ—°μ‚°ν•  경우, ReferenceError κ°€ λ°œμƒν•  것 κ°™μ§€λ§Œ undefined κ°€ λ°˜ν™˜λœλ‹€λŠ” 사싀도 μ•Œμ•„λ‘μž..


9. μ§€μˆ˜ μ—°μ‚°μž

**

ES7μ—μ„œ λ„μž…λ˜μ—ˆλ‹€.

μ’Œν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό μ§€μˆ˜κ³„μ‚°μ˜ λ°‘ base둜, μš°ν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό μ§€μˆ˜ exponent둜 κ±°λ“­μ œκ³±ν•˜μ—¬ μˆ«μžκ°’μ„ λ°˜ν™˜ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€.


μ›λž˜λŠ” Math.pow λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν–ˆλ‹€.
μ§€μˆ˜ μ—°μ‚°μžμ˜ μ‚¬μš©κ³Ό 비ꡐ해보면, μ§€μˆ˜μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 훨씬 직관적이고 κΉ”λ”ν•˜λ‹€.

2 ** (3 ** 2)
Math.pow(2, Math.pow(3, 2))

음수λ₯Ό κ±°λ“­μ œκ³±μ˜ λ°‘μœΌλ‘œ μ‚¬μš©ν•˜λ €λ©΄, κ΄„ν˜Έλ‘œ λ¬Άμ–΄μ€˜μ•Ό ν•œλ‹€.



κ·Έ μ™Έμ˜ μ—°μ‚°μžλ“€ & μ—°μ‚°μž μš°μ„ μˆœμœ„

?., ??, delete, new, instanceof, inμ΄λΌλŠ” μ—°μ‚°μžλ“€λ„ μ‘΄μž¬ν•˜μ§€λ§Œ,,

λ‚˜μ€‘μ— μ°¨μ°¨ μ‚΄νŽ΄λ³΄λ„λ‘ν•˜μž.

μ•žμ„œμ„œ side effect νš¨κ³Όκ°€ μžˆλŠ” μ—°μ‚°μžλ“€μ΄ μ’…μ’… λ“±μž₯ν–ˆμ—ˆλŠ”λ°, μ •λ¦¬ν•΄λ³΄μžλ©΄
ν• λ‹Ήμ—°μ‚°μž=, μ¦κ°μ—°μ‚°μž++/--, 그리고 λ‚˜μ€‘μ— λ‚˜μ˜¬ delete μ—°μ‚°μžμ— μ‘΄μž¬ν•œλ‹€.

μ—°μ‚°μž μš°μ„ μˆœμœ„

μˆœμœ„
1()
2new (λ§€κ°œλ³€μˆ˜ 쑴재), ., [] (ν”„λ‘œνΌν‹° μ ‘κ·Ό), () (ν•¨μˆ˜ν˜ΈμΆœ), ?. (μ˜΅μ…”λ„μ²΄μ΄λ‹μ—°μ‚°μž)
3new (λ§€κ°œλ³€μˆ˜ 미쑴재)
4x++, x--
5!x, +x, -x, ++x, --x, typeof, delete
6**
7*, /, %
8+, -
9<, <=, >, >=, in, instanceof
10==, !=, ===, !==
11?? (null 병합 μ—°μ‚°μž)
12&&
13||
14? ... : ...
15ν• λ‹Ήμ—°μ‚°μž(=, +=, -=, ...
16,



μƒκ°ν–ˆλ˜ 것 보닀 μ˜ˆμ™Έλ‚˜ 였λ₯˜,,? 버그가 λ§Žμ•„μ„œ κ³΅λΆ€ν•˜λ©΄μ„œ μ’€.. 신뒰도가 λ–¨μ–΄μ‘Œλ‹€.

μ™œ 버그가 μžˆλŠ” κ±Έ μ•Œλ©΄μ„œ κ³ μΉ˜μ§€ μ•ŠλŠ” 건지 λͺ¨λ₯΄κ² μ§€λ§Œ 일단,,, μ΄μœ κ°€ μžˆμ„ κ±°λΌλŠ” μƒκ°μœΌλ‘œ μ—°μ‚°μž 파트λ₯Ό λ§ˆλ¬΄λ¦¬ν–ˆλ‹€.

λ‹€μŒ κΈ€μ—λŠ” μ œμ–΄λ¬Έμ„ 닀루어 λ³Ό 것이닀.

0개의 λŒ“κΈ€